Excel COM互操作 - 为什么返回类型通常是动态的?

时间:2018-03-26 09:49:56

标签: c# excel com

可能是个愚蠢的问题,但我正在使用Microsoft的Office / Excel Interop类型库。

我注意到很多返回类型都是“动态”类型;例如,

Excel.Workbook wb = ...;
var ws = wb.ActiveSheet;

ws将是“动态的”而不是作为“Excel.Worksheet”返回 - 但为什么会这样?

在类型库不可用的情况下,我看到动态类型COM对象的好处,但在这种情况下,它是。

那为什么动态输入呢?

我现在唯一可以想到的是当嵌入互操作类型时,然后是.Worksheet属性是通过反射访问的,因此它的类型不是嵌入的,而是需要访问的。但这是一个疯狂的猜测。有效地必须手动投射这么多类型的不经验似乎相当大,所以我认为必须有一些相当重要的设计决策背后

1 个答案:

答案 0 :(得分:0)

来自here

  

在编译时,假定输入为动态的元素   支持任何操作。因此,您不必担心   关于对象是否从动态的COM API获取其值   来自HTML文档对象模型的IronPython等语言   (DOM),来自反射,或来自程序中的其他地方。   但是,如果代码无效,则会在运行时捕获错误。

     

.....

     

动态对象和其他类型之间的转换很容易。这个   使开发人员能够在动态和非动态之间切换   行为。

     

.....

     

许多COM方法允许参数类型和返回类型的变化   通过将类型指定为对象。这有必要明确   转换值以与强类型变量进行协调   C#。如果使用/ link(C#编译器选项)选项进行编译,   动态类型的介绍使您可以对待   COM签名中出现的对象就好像它们是类型一样   动态的,从而避免大量的铸造。