|
dynamic 关键字和动态语言运行时 (DLR) 是 C# 4 和 Microsoft .NET Framework 4 中的重大新增功能。 这些功能在宣布时就引起了人们的极大兴趣,并伴随着许多疑问。 同时人们也给出了很多答案,但这些答案现在已散布于各种文档以及各种技术博客和文章之中。 这样,人们在各种论坛和会议上总是一遍又一遍地提出相同的问题。
本文全面概述了 C# 4 中新增的动态功能,并且深入探讨了这些功能如何同其他语言和框架功能(例如反射或隐式类型化变量)一起使用。 鉴于已有大量信息可用,我有时会重新使用一些经典示例,并提供指向原始源的链接。 我还将提供指向相关内容的大量链接,供您进一步阅读。
什么是“动态”?
编程语言有时可划分为静态类型化语言和动态类型化语言。 C# 和 Java 经常被认为是静态类型化语言的例子,而 Python、Ruby 和 JavaScript 是动态类型化语言的例子。
一般而言,动态语言不执行编译时类型检查,仅在运行时识别对象的类型。 这种方法有利有弊:代码编写起来往往更快、更容易,但同时,由于您不会获得编译器错误,只能通过单元测试和其他方法来确保应用程序正常运行。
C# 最初是作为纯静态语言创建的,但 C# 4 添加了一些动态元素,用以改进与动态语言和框架之间的互操作性。 C# 团队考虑了多种设计选项,但最终确定添加一个新关键字来支持这些功能:dynamic。
dynamic 关键字可充当 C# 类型系统中的静态类型声明。 这样,C# 就获得了动态功能,同时仍然作为静态类型化语言而存在。 若要了解为何以及如何做出了这样的决定,请参考 PDC09 (microsoftpdc.com/2009/FT31) 上由Mads Torgersen 撰写的演示文稿“C# 4 中的动态绑定”。 尤其是,动态对象被认定是 C# 语言中的“一等公民”,因此没有用于打开或关闭动态功能的选项,并且没有向 C# 添加过类似于 Visual Basic 中的 Option Strict On/Off 之类的功能。
当您使用 dynamic 关键字时,您就告诉编译器关闭编译时检查。 网上以及 MSDN 文档中 (msdn.microsoft.com/library/dd264736) 有大量关于如何使用该关键字的示例。 下面是一个常见示例:
dynamic d = "test";
Console.WriteLine(d.GetType());
// Prints "System.String".
d = 100;
Console.WriteLine(d.GetType());
// Prints "System.Int32".
NET技术:了解 C# 4 中的 Dynamic 关键字,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。