I have a 3rd party C++ DLL that I call from C#.
The methods are static.
I want to abstract it out to do some unit testing so I created an interface with the static methods in it but now my program errors with:
The modifier 'static' is not valid for this item
MyMethod cannot be accessed with an instance reference; qualify it with a type name instead
How can I achieve this abstraction?
My code looks like this
private IInterfaceWithStaticMethods MyInterface;
public MyClass(IInterfaceWithStaticMethods myInterface)
{
this.MyInterface = myInterface;
}
public void MyMethod()
{
MyInterface.StaticMethod();
}
Interfaces can't have static members and static methods can not be used as implementation of interface methods.
What you can do is use an explicit interface implementation:
public interface IMyInterface
{
void MyMethod();
}
public class MyClass : IMyInterface
{
static void MyMethod()
{
}
void IMyInterface.MyMethod()
{
MyClass.MyMethod();
}
}
Alternatively, you could simply use non-static methods, even if they do not access any instance specific members.