我正在将旧版VB.NET应用程序转换为C#应用程序。 VB.NET应用程序引用一个外部.DLL(ExternalLib.dll),它具有实现MyClass
的类IMyClass
。
在VB.NET中,此代码编译并执行没有问题:
Dim external As New MyClass
external.DoMethod(1)
在C#中,此代码抛出编译时错误:
MyClass external = new MyClass();
external.DoMethod(1);
' ExternalLib.MyClass'不包含' DoMethod'的定义和 没有延伸方法' DoMethod'接受第一个类型的参数 ' ExternalLib.MyClass'可以找到(你错过了使用 指令或程序集引用?)
查看元数据,IMyClass
没有DoMethod()
。在VB.NET的智能感知中,DoMethod()
没有显示在其他可用的公共方法中,但是所有内容都编译并运行得很好。
答案 0 :(得分:1)
DoMethod()
是静态方法还是实例方法?如果它是一个静态方法,可以解释为什么你在界面中看不到它。您需要将C#代码更改为:
MyClass.DoMethod(1);
答案 1 :(得分:0)
VB.NET应用程序使用后期绑定option strict off
来访问ExternalLib.dll中的隐藏方法。使用dynamic
关键字可以在C#应用程序中实现相同的行为:
dynamic external = new MyClass();
external.DoMethod(1);
(感谢Blorgbeard指出我正确的方向。)