C# 8 で既定のインターフェイス メソッドの動作が変更されたのはなぜですか? 過去に次のコード (デフォルトのインターフェイス メソッドがリリースされていないときのデモ):
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();
}
}
次の出力があります。
コンソール出力:
I はインターフェイスのデフォルト メソッドです。
私はオーバーライドされたデフォルトのメソッドです!
しかし、C# 8 の最新バージョンでは、上記のコードは次の出力を生成しています。
コンソール出力:
私はオーバーライドされたデフォルトのメソッドです!
私はオーバーライドされたデフォルトのメソッドです!
この動作が変更された理由を誰でも説明できますか?
ノート:
IDefaultInterfaceMethod anyClass = new AnyClass(); anyClass.DefaultMethod();
((IDefaultInterfaceMethod) anyClass).DefaultMethod(); // STILL the same problem!??