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" !!!!
Cách tham chiếu được phân bổ nội bộ, tham chiếu A chứa tham chiếu của B? Có ai có thể giải thích Whats đang diễn ra không?Binding động trong C#
Um Tôi có thể sai nhưng tôi nghĩ rằng đây là những gì đang xảy ra. Khi bạn khai báo một đối tượng của lớp D và gán nó cho một lớp C --- lớp C có một hàm ảo và trong trường hợp đó nó sẽ chỉ sử dụng hàm ghi đè của D. Nhưng khi bạn khai báo một đối tượng của lớp D và gán nó cho lớp A điều gì xảy ra là vì D kế thừa từ C và C từ B và B cuối cùng kế thừa từ A nhưng đồng thời ghi đè A thì bạn có lệnh in đó. –
làm thế nào về: đọc msdn và cố gắng hiểu ảo/ghi đè/mới máy? ví dụ của bạn là hoàn toàn rõ ràng! –
@Flo: Trong trường hợp đầu tiên đối tượng C có tham chiếu D nó gọi phương thức D. Nhưng trong trường hợp thứ hai rõ ràng A có tham chiếu của D, trong khi phương thức gọi nó như thế nào gọi phương thức của B (những gì xảy ra trong nội bộ) .. Quiet Confusing .. –