【问题标题】:VB to C# TranslationVB 到 C# 的翻译
【发布时间】:2010-08-31 19:30:34
【问题描述】:

在 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# 中公开公共接口?

【问题讨论】:

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


【解决方案1】:

如果您有权访问定义类型(即不是原始 COM 对象),则可以简单地进行转换:

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

如果你使用的是 c# 4.0,你可以这样做:

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

否则你将不得不通过反射和Type.InvokeMember(...)使用动态方法调用

【讨论】:

  • 哇...不要这么轻易地到处乱扔动态。
  • @ChaosPandion - 对于来自 c# 的 COM 调用,我认为 dynamic 非常符合要求 - 几乎没有。
  • @ChaosPandion:COM 是dynamic 最有用的地方!
  • @Phillip - 我同意,但我们不知道该对象是否是 COM 对象。我认为您当前的答案确实为 OP 提供了足够的信息来做出明智的选择。
  • @Brian - 您可能没有看到原始答案,它没有提供您现在看到的相同信息。
【解决方案2】:

您需要先转换为正确的类,例如:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      这基本上是因为 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),编译器不会抛出任何异常。

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2018-05-09
          • 1970-01-01
          • 2015-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多