动态类的存在意义是什么?你可以调用可能存在或不存在的方法,这有什么意义?
主要是让 C# 4 可以更好地与使用 Python 等语言提供的 DLR 对象进行互操作。它还可以更轻松地与典型的 COM 对象进行互操作,而无需创建互操作程序集。
一个原因是为了更容易地使用后期绑定与COM进行交互。因此,您不再需要使用Interop程序集。
如果您需要调用不同版本的COM服务器,则这非常好。例如,当您需要使应用程序与不同版本的Office一起工作时。
我肯定不会在非交互操作场景下使用它。在处理程序集或动态语言编写的代码时,它简化了设计时间体验。在这些情况下,您必须对动态类型进行假设。如果您的假设失败,无论如何都会在运行时引发异常。
把它看作是Invoke或反射的速记。
另一个问题可能在编写应该与某些汇编版本一起工作的代码时出现。比如一个插件,其中没有定义任何程序集绑定。现在,需要为多个主机程序集版本编译相同的源代码。
在这种情况下,“鸭子类型”这样的特性将是一个很好的解决方案。
我的看法是:非常有用的动态
场景是隐式接口。以EndianBinaryReader
为例,它可以代替BinaryReader
,但这两个类没有共同的适当接口。是的,你也可以创建这样的接口并包装这些类,但这不会扩展(如果你因某种原因获得了第三个具有这样的接口的类,你也必须将其包装)。隐式接口(鸭子类型)是动态语言中有用的特性,在C#中使用dynamic
也可以实现。
dynamic
替换了相关类名。 - Brian