C#4.0动态功能

时间:2008-12-30 11:10:51

标签: c#

拥有动态类有什么意义,你可以在其上调用可能存在或不存在的方法?

6 个答案:

答案 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#中使用它。