当您开始考虑 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"
工作?
他们是否重建了整个机制?