class A
{
public virtual void WhoAreYou() { Console.WriteLine("I am an A"); }
}
class B : A
{
public override void WhoAreYou() { Console.WriteLine("I am a B"); }
}
class C : B
{
public new virtual void WhoAreYou() { Console.WriteLine("I am a C"); }
}
class D : C
{
public override void WhoAreYou() { Console.WriteLine("I am a D"); }
}
C c = new D();
c.WhoAreYou();// "I am a D"
A a = new D();
a.WhoAreYou();// "I am a B" !!!!
如何在內部分配引用,引用A包含引用B? 任何人都可以解釋發生了什麼?C中的動態綁定#
嗯打破我可能是錯的,但我認爲這是發生了什麼。當你聲明一個D類的對象並把它分配給一個類時C --- C類具有一個虛函數,在這種情況下它將只使用D的覆蓋函數。但是,當你聲明D類的一個對象並將它分配給一個類A時,會發生什麼是因爲D從B和C繼承了C和C,並且B最終從A繼承了,但同時覆蓋了A,那麼你就有了這個打印語句。 –
怎麼樣:閱讀MSDN並試圖理解虛擬/覆蓋/新機器?你的例子非常清楚! –
@Flo:在第一種情況下,對象C具有D的引用,它調用D的方法。但在第二種情況下,顯然A具有D的參考,而方法調用它如何調用B的方法(內部發生什麼)..安靜的混亂.. –