网站 ftp,百度公司全称,专门做餐饮空间设计的网站,做网站后期续费是怎么算的《C#与.NET 4高级程序设计:第5版》第18章动态类型和动态语言运行时#xff0c;本章#xff0c;我们将学习dynamic关键字的方方面面#xff0c;理解如何使用DLR #xff08;Dynamic Language Runtime#xff0c;动态语言运行时#xff09;将松散的类型映射到正确的内存对象…《C#与.NET 4高级程序设计:第5版》第18章动态类型和动态语言运行时本章我们将学习dynamic关键字的方方面面理解如何使用DLR Dynamic Language Runtime动态语言运行时将松散的类型映射到正确的内存对象。理解了DLR提供的诸多服务之后你将看到一些示例它们使用动态类型来简化后期绑定方法的调用通过反射服务并且可以方便地与遗留的COM库进行通信。本节为大家介绍Microsoft.CSharp.dll程序集的作用。
作者朱晔 等译来源人民邮电出版社|2011-04-03 12:59 收藏 分享
18.1.2 Microsoft.CSharp.dll程序集的作用
当使用Visual Studio 2010新建一个C#项目时将自动引用一个名为Microsoft.CSharp.dll的.NET 4程序集可以在Solution Explorer的References文件夹下找到。这个库非常小只定义了一个命名空间Microsoft.CSharp.RuntimeBinder和两个类如图18-2所示。 点击查看大图图18-2 Microsoft.CSharp.dll程序集
顾名思义这两个类为强类型的异常类。RuntimeBinderException是最普通的类如果试图调用一个不存在的动态数据类型的成员将会抛出该异常比如调用toupper()和Foo()方法。如果调用了一个存在的成员但却指定了错误的参数数据将同样会抛出该异常。
由于动态数据的这种不确定性在调用用C#的dynamic关键字声明的变量的成员时可以用合适的try/catch块来包裹并以一种优雅的方式来处理异常。 static void InvokeMembersOnDynamicData() { dynamic textData1 Hello; try { Console.WriteLine(textData1.ToUpper()); Console.WriteLine(textData1.toupper()); Console.WriteLine(textData1.Foo(10, ee, DateTime.Now)); } catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException ex) { Console.WriteLine(ex.Message); } }
在调用这个方法时会发现对ToUpper()方法注意T和U这两个字母的调用正确无误但控制台上还是会显示一条错误数据。 HELLO string does not contain a definition for toupper
当然如果将所有动态方法的调用都用try/catch块来包裹这个过程将是十分麻烦的。只要注意了拼写和参数传递就没有必要都进行包裹。但是当你不确定目标类型是否包含某个成员的时候如果用try/catch块来进行包裹的话那么异常的捕获就会十分方便了。