【发布时间】:2012-12-15 10:58:14
【问题描述】:
当您开始思考时,动态类型的一个非常大的优势就会出现 关于 C# 与外部和非本地对象的关系——COM 特别是对象。在这种情况下,动态类型使用解析 COM IDispatch 接口,这反过来意味着您可以使用 COM 对象“原始”,即没有主互操作程序集 (PIA)。作为 许多 COM 对象广泛使用变体类型,它可以 存储多种标准数据类型中的任何一种,能够使用 动态类型代替变体是一个很大的简化。
我已经知道如何在 C# 中使用动态,但是 - 我想知道它是如何完成的。(通常使用 COM)
查看Office COM 对象模型示例:
(Excel.Range)excel.Cells[1,1]).Value= "some string"
演员必须包含因为PIA使用对象类型来表示变体
现在(2010 ...),动态可以通过:
excel.Cells[1,1].Value= "some string"
但是
一个对象可以通过实现DynamicObject来提供它的绑定语义
如:
public class MyClass: DynamicObject
{
public override bool TryInvokeMember ( InvokeMemberBinder binder, object[] args, out object result)
{
...
}
}
所以我的问题:
MS [changed] or [added code] or [now-inherit-DynamicObject] COM 对象是否允许excel.Cells[1,1].Value= "some string" 工作?
他们是否重建了整个机制?
【问题讨论】: