拥有动态类有什么意义,你可以在其上调用可能存在或不存在的方法?
答案 0 :(得分:10)
主要是它允许C#4使用像Python这样的语言与DLR提供的对象更好地互操作。它还允许更容易与典型的COM对象互操作,而无需创建互操作程序集。
答案 1 :(得分:4)
重点是您通常会确信该方法将存在(或动态处理 - 例如“book repository”类中的FindByAuthor
方法,该方法被转换为适当的SQL查询)但是你不知道静态类型 - 或者接口的类型相当弱(例如Office COM API)。
我不希望动态类型在C#中非常有用非常 - 但是当它很方便时,我怀疑它会非常非常方便。
答案 2 :(得分:3)
一个原因是使用后期绑定更容易与COM使用互操作。因此您不必再使用互操作程序集。
如果您需要调用不同版本的COM服务器,这非常好。例如,当您需要应用程序来使用不同版本的Office时。
答案 3 :(得分:1)
我肯定不会使用它的外部互操作方案。在处理用动态语言编写的程序集或代码时,它简化了设计时体验。在这些情况下,您必须对动态类型做出假设。如果您的假设失败,您将在运行时获得异常。
将其视为Invoke或反射的简写。
答案 4 :(得分:1)
另一个问题可能是编写一个应该适用于某些程序集版本的代码。说一个没有定义程序集绑定的插件。现在需要为许多主机程序集版本编译相同的源代码。
在这种情况下,像'鸭子打字'这样的功能将是一个很好的解决方案。
答案 5 :(得分:0)
我的2美分:非常有用的基于dynamic
的场景是隐式接口。例如,可以使用EndianBinaryReader
而不是BinaryReader
,但这两个类不共享适当的公共接口。是的,你也可以创建这样的接口并包装这些类,但是不能扩展(如果你出于某种原因获得了第三个这样的接口,你也必须包装它)。隐式接口(鸭子类型)是动态语言中的有用功能,使用dynamic
也可以在C#中使用它。