VB到C#翻译

时间:2010-08-31 19:30:35

标签: c# vb.net c#-to-vb.net

在VB(ASP.NET)中

Application("myapp")= Server.CreateObject("APP.Engine")

aa = Application("myapp").myMethod(2)

作品。

在C#中我试过

Application["myapp"]= Server.CreateObject("APP.Engine")

但是

Application["myapp"].myMethod(2)

失败
'object' does not contain a definition for 'myMethod'

如何在C#中公开公共接口?

5 个答案:

答案 0 :(得分:7)

如果您可以访问定义类型(即不是原始COM对象),则只需转换:

((APP.Engine)Application["myapp"]).myMethod(2);

如果您使用的是c#4.0,则可以执行以下操作:

dymamic myApp = Application["myapp"];
myApp.myMethod(2);

否则,您必须使用反射和Type.InvokeMember(...)

来使用动态方法调用

答案 1 :(得分:3)

您需要先投射到正确的班级,例如:

((APP.Engine)Application["myapp"]).myMethod(2)

答案 2 :(得分:0)

将Application [“myapp”]的结果转换为正确的类型,如下所示:

((APP.Engine)Application["myapp"]).myMethod(2);

其他选项包括创建本地引用并使用它。

答案 3 :(得分:0)

这基本上是因为C#是强类型语言。当您调用Application时,您实际上正在调用Object类型的集合。该集合实际上是一个Object数组。我们将它作为对象,因为它可以让您将几乎任何东西存储到集合中。

现在Application [“myapp”]最终将返回System.Object类型的对象。

因此您需要将对象类型转换为您的类型。

App.Engine obj = Application["myapp"] as App.Engine;
if(obj !=  null)
  obj.myMethod(2);

对象obj是对实际类型的引用,如果调用myMethod(2),编译器不会抛出任何异常。

答案 4 :(得分:0)

在将代码从VB转换为C#时记住一件事是,C#是强类型语言,在您访问任何类型之前,您需要转换它。但是在VB中不需要相同的。

因此,对于此示例,您需要使用App.Engine进行类型转换。

((APP.Engine)Application["myapp"]).myMethod(2)
相关问题