动态关键字,C#和Interop?

Syn*_*max 7 c# interop dynamic

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

dynamic myVariable = null;

firstInteropMethod(ref myVariable);
secondInteropMethod(myVariable); //Not by ref
Run Code Online (Sandbox Code Playgroud)

两种方法的方法签名是

firstInteropMethod(ref object someObject);
secondInteropMethod(object someObject);
Run Code Online (Sandbox Code Playgroud)

期望值是定义的双数组

double[,]
Run Code Online (Sandbox Code Playgroud)

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

firstInteropMethod(ref myVariable);
secondInteropMethod((double[,]) myVariable);
Run Code Online (Sandbox Code Playgroud)

给出预期的结果.

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

Eth*_*iac 5

这篇有关动态的MSDN文章解释了为什么在操作将参数类型声明为as时,需要对COM Interop进行强制转换,object并指出使用/link:filelist编译器选项将使您也可以将COM方法签名定义为动态的。