在 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/