动态关键字,C#和Interop?

时间:2011-05-18 10:44:01

标签: c# dynamic interop

好的,我正在调用一个我无法访问的互操作dll。这是伪代码:

dynamic myVariable = null;

firstInteropMethod(ref myVariable);
secondInteropMethod(myVariable); //Not by ref

这两种方法的方法签名是

firstInteropMethod(ref object someObject);
secondInteropMethod(object someObject);

期望值是定义的双数组

double[,]

现在有趣的部分。我的原始代码获得了错误的结果,但没有错误。但是,这段代码:

firstInteropMethod(ref myVariable);
secondInteropMethod((double[,]) myVariable);

给出预期的结果。

使用手表和语句类型我已经确定两个调用之间没有任何变化,那么是什么给出了?为什么会有差异,这会有什么区别?

1 个答案:

答案 0 :(得分:5)

This MSDN article on dynamic解释了当操作将参数类型声明为object时,COM Interop需要进行强制转换的原因,并指出使用/link:filelist编译器选项将允许您将COM方法签名定义为动态的。