c# - 为什么从 C# 4.0 开始使用的 COM 库需要大量使用动态类型?

标签 c# com dynamic c#-4.0 dynamic-typing

在 C# 4.0 演示中,我看到很多使用动态类型的代码。例如,以下代码设置 Excel 单元格的值:

excel.Cells[1, 1].Value = ...

但是,您也可以通过强制转换以早期绑定(bind)方式访问单元格:

((范围)excel.Cells[1, 1]).Value = ...;

为什么 Excel COM 库不首先将 Cell 类型描述为 Range 类型?同样,以下方法的所有参数都是动态的:

excel.ActiveWorkbook.Charts.Add(...)

为什么参数不能是静态的?再看Excel对象模型,到处都是动态类型。这是由于 COM 的表达能力的限制吗?在 COM 库中使用动态类型而不是静态类型时是否存在某种模式?

最佳答案

COM 库将此作为变体公开,这可能意味着任何数量的事情。用变体做这么多事情真的是 Office 库的“错”。

dynamic 类型是最接近 variant 的 .NET 等价物(现在它存在),但团队不想更改 tlbimp 以在 PIA 中生成动态类型向后兼容的原因。当链接 PIA(将您使用的位构建到您自己的程序集中)而不是引用它时,您只会在 C# 4 中获得“变体到动态”的转换。

关于c# - 为什么从 C# 4.0 开始使用的 COM 库需要大量使用动态类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1187160/

相关文章:

c# - 控制台应用程序使用哪种生活方式?

c# - 在 C# 中实现 DISPID_VALUE 并从 C++ 中调用它

python - 使用 pythoncom 在 Python 进程之间编码(marshal) COM 对象

c++ - idl 和 odl 的区别

c# - MVC 模型 - 应用程序 (EF) 中的一个或多个 dbcontext

c# - 列表和只读属性

c# - Mathf.Atan2 返回不正确的结果

xml - 如何在 actionscript 3 中设置 xml 元素的变量属性?

java - 将所有图像转换为 PNG

c# - .NET 动态方法。最棒的表演