インターフェースに静的メソッドを実装するにはどうすればいいですか? 質問する

インターフェースに静的メソッドを実装するにはどうすればいいですか? 質問する

C# から呼び出すサードパーティの C++ DLL があります。メソッドは静的です。

ユニットテストを実行するために抽象化したいので、静的メソッドを含むインターフェースを作成しましたが、プログラムで次のエラーが発生します。

このアイテムでは修飾子「static」は無効です

MyMethod cannot be accessed with an instance reference; qualify it with a type name instead

この抽象化をどのように実現できるでしょうか?

私のコードは次のようになります

private IInterfaceWithStaticMethods MyInterface;

public MyClass(IInterfaceWithStaticMethods myInterface)
{
  this.MyInterface = myInterface;
}

public void MyMethod()
{
  MyInterface.StaticMethod();
}

ベストアンサー1

インターフェースには静的メンバーを含めることはできず、静的メソッドはインターフェース メソッドの実装として使用することはできません。

明示的なインターフェース実装を使用することは可能です:

public interface IMyInterface
{
    void MyMethod();
}

public class MyClass : IMyInterface
{
    static void MyMethod()
    {
    }

    void IMyInterface.MyMethod()
    {
        MyClass.MyMethod();
    }
}

あるいは、インスタンス固有のメンバーにアクセスしない場合でも、非静的メソッドを使用することもできます。

アップデート:新しいC#バージョン(8以降)については、この回答を参照してください。

おすすめ記事