c# 4.0 DLR and COM

本文关键字:and COM DLR | 更新日期: 2023-09-27 18:24:59

说明DLR优点的一个常见示例是将其与COM等遗留组件一起使用,并能够调用编译时不可见的方法。

这样做的目的是跳过COM互操作步骤吗?因为一旦组件被Regasm'd,编译器就会拥有元数据。

假设我们跳过互操作步骤,对COM签名(由.net使用)的任何更改都需要重新编译。

如果我不得不做出另一个猜测,DLR还提供了调用的缓存,因此任何后续调用都应该比使用常规反射的调用更快。。所以这也许是DLR的一个好处。。但从语法上来说,我只是没有看到它。

c# 4.0 DLR and COM

这样做的目的是跳过COM互操作步骤吗?

不是,它只是简化了方法的调用,这可能会让Reflection非常痛苦。无论您使用的是Reflection还是C#4.0 dynamic,都使用Interop与非托管代码进行通信。

假设我们跳过互操作步骤,对COM的任何更改签名(由.net使用)仍需要重新编译。

这取决于情况。如果重命名COM方法,则需要重新编译.NET调用代码,因为当您尝试调用不存在的方法时,它会在运行时中断。

与后绑定COM进行互操作特别有用。这种互操作不添加对COM类型库或PIA的引用。在dynamic关键字可用之前,在C#中做这件事非常痛苦,它需要反射代码。如果你有一个类型库,那么你几乎总是想使用它,因为它速度更快,在编译时可以捕捉错误,并支持IntelliSense。您不想使用它的唯一原因是,当您试图使代码足够灵活以处理不同版本的COM服务器时。然而,运行时异常总是会破坏你的一天,这是非常危险的。事实上,没有类型库是很少见的,几乎所有COM组件的作者都提供了类型库,因为它们的优势非常大。

Regism恰恰相反,只有在用C#编写自己的[ComVisible]服务器时才能使用它。动态没有任何好处。