好的,我正在调用一个我无法访问的互操作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);
给出预期的结果。
使用手表和语句类型我已经确定两个调用之间没有任何变化,那么是什么给出了?为什么会有差异,这会有什么区别?
答案 0 :(得分:5)
This MSDN article on dynamic解释了当操作将参数类型声明为object
时,COM Interop需要进行强制转换的原因,并指出使用/link:filelist
编译器选项将允许您将COM方法签名定义为动态的。