Tôi có đơn giản ba lớp:Từ khóa mới: tại sao phương thức dẫn xuất không được gọi?
class A
{
public virtual void Write()
{
Console.Write("A");
}
}
class B:A
{
public override void Write()
{
Console.Write("B");
}
}
class C : B
{
public new void Write()
{
Console.Write("C");
}
}
Và tôi đang tạo ra các đối tượng và gọi phương pháp của họ:
A a = new A();
a.Write();
A b = new C();
b.Write();
C c = new C();
c.Write();
Và đầu ra sẽ là: ABC
Những gì tôi không thể hiểu là tại sao những mã sản xuất B
?:
A b = new C();
b.Write();
Tôi nghĩ rằng nó phải là C
. Tuy nhiên, tôi đã kiểm tra nhiều lần và luôn là B
.
Tôi hiểu rằng A b = new C()
tạo loại đối tượng mới của C. Vậy đầu ra phải là C. Hoặc là hành vi đặc biệt để gọi phương thức ghi đè khi chúng ta sử dụng nó mà không cần truyền?
Tại sao điều đó xảy ra? Vì chúng tôi đã không sử dụng bất kỳ tham chiếu đến lớp B
.
Vì đó là cách từ khóa mới hoạt động. https://msdn.microsoft.com/en-us/library/ms173153.aspx – AndyJ