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();
}
}
あるいは、インスタンス固有のメンバーにアクセスしない場合でも、非静的メソッドを使用することもできます。