Bookcold

导航

C#4.0 动态绑定(Dynamic Binding)

C#4.0的动态绑定依赖于Dynamic Language Runtime(DLR),但这不是动态版的CLR,而是CLR之上的一个库(System.Dynamic)。它的主要任务是提供运行时的服务来统一(unify)动态语言——包括静态和动态类型的语言。这意味着例如C#、VB、IronPython和IronRuby语言都是用通用的协议动态的调用函数,运行它们共享库文件并且调用其他语言写的代码。DLR还提供了call-site caching的优化机制,这避免了DLR在动态绑定时重复去做昂贵的方法匹配(member resolution decisions)。

语言绑定(Language Binding) static void Main(string[] args) { int x=3,y=5; Console.WriteLine(Mean(x, y)); } private static dynamic Mean(dynamic x, dynamic y) { return (x + y) / 2; }

这样的写法使得Mean方法适用于所有的数值类型,但也丢失了编译器的静态类型保护。如:

string s = Mean(x, y);这样的语句只有在运行时才会报错。 我们可以通过时用泛型类型来避免这个错误,并在计算的时候映射为dynamic类型。 private static T Mean<T>(T x, T y) { dynamic result = ((dynamic)x + [...]

posted on 2010-04-15 20:46  bookcold  阅读(246)  评论(0)    收藏  举报