爲什麼啓動程序後會顯示C::Foo(object o)
?爲什麼重載不起作用?
using System;
namespace Program
{
class A
{
static void Main(string[] args)
{
var a = new C();
int x = 123;
a.Foo(x);
}
}
class B
{
public virtual void Foo(int x)
{
Console.WriteLine("B::Foo");
}
}
class C : B
{
public override void Foo(int x)
{
Console.WriteLine("C::Foo(int x)");
}
public void Foo(object o)
{
Console.WriteLine("C::Foo(object o)");
}
}
}
我不明白爲什麼當你調用C :: Foo
,選擇方法與object
,不與int
。什麼是B
類,該方法被標記爲重寫?
在類C
中,有兩個名稱相同但參數不同的方法,是不是過載?爲什麼不?在父母中重寫的方法之一是否重要?它以某種方式禁用超載?
簡單的答案。不要這樣做。不要在對象中包含重載。使用泛型,甚至動態不是對象 – Mick