【问题标题】:Calling methods on interop objects, VB vs. C#在互操作对象上调用方法,VB 与 C#
【发布时间】:2009-04-07 06:02:03
【问题描述】:

在 C# 中,我在互操作类(Connection,用 VB6 编写)上调用一个函数,它本身返回一个普通对象(System)。然后我也调用了该对象 (InitialiseData) 上的一个函数(即使编译器不知道它)。

var isInitialised = Connection.System.InitialiseData(path);

问题是,因为 System object 只返回一个 Object,我得到编译错误“无法解析符号”。我明白为什么,但同样的事情在 VB.NET 中也能正常工作:

Dim isInitialised As Boolean = Connection.System.InitialiseData(path)

大概 VB.NET 正在后台做一些事情,允许一种隐式后期绑定,而 C# 没有?有没有办法让 C# 以同样无知的方式编译?

事实上,在这种情况下,我似乎能够通过首先将 Object 转换为显式互操作类型来解决它:

var system = (QLO.System)Connection.System;
var isInitialised = system.InitialiseData(path);

但我仍然对我无法能够转换为类型但仍想在其上调用函数的情况的答案感兴趣。如果这是一个愚蠢的问题,请原谅我,我才刚刚开始从 VB.NET 迁移到 C#...谢谢!

【问题讨论】:

    标签: c# vb.net interop


    【解决方案1】:

    后期绑定将在 4.0 中引入 C#。同时你可以做的是将函数包装在VB.NET中,并使用C#调用调用VB6方法的VB.NET方法。

    既然将其转换为正确的类型在 C# 中有效,这是否意味着 VB.NET 看到正确的类型而 C# 将其视为 Object?

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2013-01-17
      • 1970-01-01
      相关资源
      最近更新 更多