C#特性聚焦:动态类型化对象、Duck类型和多重分配

在我们要深入研究第一个C#特性之前,有必要知道微软许诺,任何在C#中有的功能在VB中也会具通过某种形式来提供,反之亦然。不过他们没有必要以同样的方式来提供这些功能,语言之间还是希望继续有所区别。

随着动态语言和DLR日益增加的重要性,C#也需要能处理动态类型化的对象(Dynamically Typed Objects)。目前,通过对静态类进行反射,虽然能够实现后期调用,但这种方式却需要大量的代码。此外,对DLR对象的调用需要一个完全不同的,使用 了DLR反射函数的调用方式。

在C#中,你可以简单地声明对象的静态类型为“dynamic”。就像VB的Option Explicit Off选项一样,它告诉编译器忽略必要的代码来解析运行时调用的方法绑定。在IL层面,被声明为dynamic的变量是一个System.Object类 型,附加了一个额外标签来标明它使用动态调用语义。

在运行时,所有普通重载解析规则都是基于对象的运行时类型执行的。这意味着,你能够直接地执行多重分配,而不用借助反射或访问者模式。

每个动态语言都具有它们自己的成员查找规则。为了支持这个功能,对象需要实现IDynamicObject接口。如果这个接口存在于运行时对象上,那么对象就能处理它自己的成员查找过程。在示范中,Ander演示了如何在C#中定义一个动态对象。

当然,这就意味着你可以在C#中的任何地方使用duck类型。

查看英文原文:C# Feature Focus: Dynamically Typed Objects, Duck Typing, and Multiple Dispatch

你可能感兴趣的:(C#特性聚焦:动态类型化对象、Duck类型和多重分配)