10

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!??
4

1 に答える 1