Tại sao hành vi của Phương thức giao diện mặc định thay đổi trong C # 8? Trước đây, đoạn mã sau (Khi các phương thức giao diện Mặc định là bản demo không được phát hành):
interface IDefaultInterfaceMethod
{
// By default, this method will be virtual, and the virtual keyword can be here used!
virtual void DefaultMethod()
{
Console.WriteLine("I am a default method in the interface!");
}
}
interface IOverrideDefaultInterfaceMethod : IDefaultInterfaceMethod
{
void IDefaultInterfaceMethod.DefaultMethod()
{
Console.WriteLine("I am an overridden default method!");
}
}
class AnyClass : IDefaultInterfaceMethod, IOverrideDefaultInterfaceMethod
{
}
class Program
{
static void Main()
{
IDefaultInterfaceMethod anyClass = new AnyClass();
anyClass.DefaultMethod();
IOverrideDefaultInterfaceMethod anyClassOverridden = new AnyClass();
anyClassOverridden.DefaultMethod();
}
}
có đầu ra sau:
Bảng điều khiển đầu ra:
Tôi là một phương thức mặc định trong giao diện!
Tôi là một phương thức mặc định bị ghi đè!
Nhưng với phiên bản cuối cùng của C # 8, đoạn mã trên đang tạo ra kết quả sau:
Bảng điều khiển đầu ra:
Tôi là một phương thức mặc định bị ghi đè!
Tôi là một phương thức mặc định bị ghi đè!
Bất cứ ai cũng có thể giải thích cho tôi tại sao hành vi này được thay đổi?
Ghi chú:
IDefaultInterfaceMethod anyClass = new AnyClass(); anyClass.DefaultMethod();
((IDefaultInterfaceMethod) anyClass).DefaultMethod(); // STILL the same problem!??
Cut base() syntax for C# 8. We intend to bring this back in the next major release.
. Điều này sẽ yêu cầu hỗ trợ thời gian chạy để hoạt động đúng.
virtual
tôi đoán? Và có thể giới thiệu một viên kim cương thừa kế