繁体   English   中英

C#4.0动态功能

[英]C# 4.0 Dynamic features

有一个动态类有什么意义,你可以调用可能会或可能不存在的方法?

主要是它允许C#4使用像Python这样的语言与DLR提供的对象更好地互操作。 它还允许更容易与典型COM对象互操作,而无需创建互操作程序集。

关键是您通常会确信该方法将存在(或动态处理 - 例如“书库”类中的FindByAuthor方法,该类被转换为适当的SQL查询)但您不知道静态type - 或接口的类型相当弱(例如Office COM API)。

我不希望动态类型是非常有用的往往在C#中-但是当它的方便,我怀疑这将是非常,非常方便。

一个原因是使用后期绑定更容易与COM互操作。 因此您不必再使用互操作程序集。

如果您需要调用不同版本的COM服务器,这非常好。 例如,当您需要应用程序来使用不同版本的Office时。

我肯定不会使用它的外部互操作方案。 在处理用动态语言编写的程序集或代码时,它简化了设计时体验。 在这些情况下,您必须对动态类型做出假设。 如果您的假设无论如何都会失败,您将在运行时获得异常。

可以把它想象为Invoke或反射的简写。

另一个问题可能是编写一个应该适用于某些程序集版本的代码。 说一个没有定义程序集绑定的插件。 现在需要为许多主机程序集版本编译相同的源代码。

在那种情况下,像'鸭子打字'这样的功能将是一个很好的解决方案

我的2美分:非常有用的基于dynamic的场景是隐式接口。 EndianBinaryReader ,它可以代替BinaryReader使用,但这两个类不共享适当的通用接口。 是的,你也可以创建这样的接口并包装这些类,但是不能扩展(如果你出于某种原因获得了第三个这样的接口,你也必须包装它)。 隐式接口(duck typing)是动态语言中的有用功能,使用dynamic语言也可以在C#中使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM