【发布时间】:2011-12-10 20:01:40
【问题描述】:
我在尝试将一些代码从 java 移植到 c# 时遇到了一些麻烦。
首先解释一下java代码背后的关键概念: 现有代码的关键概念是类导入/使用外部库中的方法。该类实现了一个接口,该接口声明了外部库中的大部分方法。好处是能够创建像
这样的实例Interface1 实例 = new classImplementingInterface1();
我正在尝试移植实现接口并从外部库导入方法的代码。实际上我不得不将该接口转换为抽象类,因为 java 接口使用包含预定义值的字段,而 .NET 接口实际上不支持。
这可能是我的凝视点:
public abstract class abstractClassA
{
public abstract int abstractMethodA(int parameter);
}
public class usualClass : abstractClassA
{
[DllImort("ExternalLib.dll")]
public static extern abstractMethodA(int parameter);
}
一个抽象类用于能够从实现该抽象类的类中创建实例,只需键入
abstractClassA instance = new usualClass();
好的,这就是我想要做的,但我发现这是行不通的,虽然我继承了一个抽象类,但我必须对我想要实现的方法使用覆盖语句
public class usualClass : abstractClassA
{
public extern override abstractMethodA(int parameter);
}
这将无法与 DllImport 语句结合使用,因为它告诉我使用该语句的方法应同时声明:extern 和 static。添加 override 关键字来实现抽象类是不可能的,因为不能将静态成员声明为 override。所以我想我被困住了:/
但实际上我想创建一个从外部库命名入口点的类。但是我希望这个类实现一个接口/抽象类,以便能够通过键入来创建实现这个接口/抽象类的类的实例
abstractClassA instance = new usualClass();
我还使用接口尝试了这些东西(但没有烦人的静态预定义字段),我发现接口实现也不能与 DllImport 语句结合使用,编译器说命名方法是静态的,因此不能实现接口方法。这实际上是有道理的,但不是我的问题的合适解决方案。
你有过这种想法或更多想法的经验吗?
【问题讨论】:
标签: c# .net windows visual-studio-2010 winapi