可能是个愚蠢的问题,但我正在使用Microsoft的Office / Excel Interop类型库。
我注意到很多返回类型都是“动态”类型;例如,
Excel.Workbook wb = ...;
var ws = wb.ActiveSheet;
ws将是“动态的”而不是作为“Excel.Worksheet”返回 - 但为什么会这样?
在类型库不可用的情况下,我看到动态类型COM对象的好处,但在这种情况下,它是。
那为什么动态输入呢?
我现在唯一可以想到的是当嵌入互操作类型时,然后是.Worksheet属性是通过反射访问的,因此它的类型不是嵌入的,而是需要访问的。但这是一个疯狂的猜测。有效地必须手动投射这么多类型的不经验似乎相当大,所以我认为必须有一些相当重要的设计决策背后
答案 0 :(得分:0)
来自here
在编译时,假定输入为动态的元素 支持任何操作。因此,您不必担心 关于对象是否从动态的COM API获取其值 来自HTML文档对象模型的IronPython等语言 (DOM),来自反射,或来自程序中的其他地方。 但是,如果代码无效,则会在运行时捕获错误。
.....
动态对象和其他类型之间的转换很容易。这个 使开发人员能够在动态和非动态之间切换 行为。
.....
许多COM方法允许参数类型和返回类型的变化 通过将类型指定为对象。这有必要明确 转换值以与强类型变量进行协调 C#。如果使用/ link(C#编译器选项)选项进行编译, 动态类型的介绍使您可以对待 COM签名中出现的对象就好像它们是类型一样 动态的,从而避免大量的铸造。