在C#中,我在一个互操作类上调用一个函数(连接,用VB6编写),它本身返回一个普通对象(系统)。然后我也调用了该对象( InitialiseData )的函数(即使编译器不知道它)。
var isInitialised = Connection.System.InitialiseData(path);
问题是,因为System对象返回一个纯粹的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#...谢谢!
答案 0 :(得分:1)
后期绑定将在4.0中进入C#。同时你可以做的是将函数包装在VB.NET中并使用C#调用调用VB6方法的VB.NET方法。
由于将它转换为适当的类型在C#中工作,这是否意味着VB.NET看到了正确的类型而C#将其视为对象?