概述
《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块来进行包裹的话,那么异常的捕获就会十分方便了。
最后
以上就是寂寞汽车为你收集整理的Microsoft.CSharp.dll程序集的作用的全部内容,希望文章能够帮你解决Microsoft.CSharp.dll程序集的作用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复