为什么在 C# 8 中更改了默认接口方法的行为?过去如下代码(默认接口方法demo时未发布):
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# 8 最新版本,上面的代码会产生以下输出:
控制台输出:
我是一个被覆盖的默认方法!
我是一个被覆盖的默认方法!
任何人都可以向我解释为什么这种行为会改变?
笔记:
IDefaultInterfaceMethod anyClass = new AnyClass(); anyClass.DefaultMethod();
((IDefaultInterfaceMethod) anyClass).DefaultMethod(); // STILL the same problem!??