Tôi đang gặp các loại sau đây:Nhầm lẫn về "ghi đè" và "mới" trong C#
class Base
{
public virtual void Print()
{
Console.WriteLine("Base");
}
}
class Der1 : Base
{
public new virtual void Print()
{
Console.WriteLine("Der1");
}
}
class Der2 : Der1
{
public override void Print()
{
Console.WriteLine("Der2");
}
}
Đây là phương pháp chính của tôi:
Base b = new Der2();
Der1 d1 = new Der2();
Der2 d2 = new Der2();
b.Print();
d1.Print();
d2.Print();
Đầu ra là Base
, Der2
, Der2
.
Theo như tôi biết, Ghi đè sẽ không cho phép phương thức trước đó chạy, ngay cả khi con trỏ trỏ đến chúng. Vì vậy, dòng đầu tiên cũng nên xuất ra Der2
. Tuy nhiên Base
xuất hiện.
Làm cách nào có thể? Cách ghi đè không hoạt động ở đó?
Thật Một ví dụ tuyệt vời ... Bí quyết duy nhất ở đây là: - intially, phương pháp BASE đã được ẩn bằng phương pháp ảo của "Der-1", do đó quá đi xe phương pháp "Der-2 "KHÔNG THỂ được thực hiện. Vì vậy, chúng tôi đã nhận được giá trị của BASE. – Kings