我有一个第三方C++ DLL,我从C语言调用.

方法是静电.

我想把它抽象出来做一些单元测试,所以我创建了一个带有静态方法的接口,但现在我的程序出现了以下错误:

修饰符"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();
}

推荐答案

不能在C#中定义接口上的静态成员.接口就是合同for instances.

我建议您按照当前的方式创建界面,但不要使用static关键字.然后创建一个实现接口的类StaticIInterface,调用静态C++方法.要进行单元测试,请创建另一个类FakeIInterface,它也实现了接口,但执行处理单元测试所需的操作.

一旦定义了这两个类,就可以为环境创建所需的类,并将其传递给MyClass的构造函数.

.net相关问答推荐

如何使用AWS Lambda函数制作网络挂钩?

仅使用 .NET GetBytes 方法转换有效字节而不创建问号

Npgsql Minimum Pool Size 似乎没有被考虑在内

查询 MongoDb 中嵌入式文档中的一个字段,该字段抛出调用运算符的左侧必须是对持久属性的直接访问

仅在有换行符时捕获分隔符之间的所有文本

防止在 .NET 上构建路径中的反斜杠以进行跨平台部署

泛型方法是如何、何时、何地具体化的?

哪个单元测试框架?

如何从 .net 中的数组类型获取数组项类型

静态析构函数

如何在可取消的异步/等待中处理 TransactionScope?

.NET 中的对象引用有多大?

如何在 WPF 中的 Xaml 文件中添加注释?

我应该绑定到 ICollectionView 还是 ObservableCollection

错误 NU1605 检测到包降级

将月份 int 转换为月份名称

从流中获取 TextReader?

如何使用 EPPlus 设置 XLSX 单元格宽度?

如何获取当前的 ProcessID?

LINQ 可以与 IEnumerable 一起使用吗?