06 2015 档案
摘要:到目前为止,本章的重点一直放在发射机制中用于构建动态可扩展应用程序所需的那些方面,包括程序集加载、类型发现以及对象构造。为了获得较好的性能和编译时的类型安全性,应尽量避免使用发射。在动态可扩展应用程序的情况下,构造好一个对象之后,宿主代码一般要将对象转型为编译时已知的一个接口或者基类。这样一来,访问...
阅读全文
摘要:构建可扩展的应用程序时,接口是中心。可用基类来代替接口,但接口通常是首选的,因为它允许加载项开发人员选择他们自己的基类。例如,假如你要写一个应用程序,它能无缝的加载和使用别人创建的类型。下面描述了如何设计这样的应用程序。创建一个“宿主SDK”(Host SDK)程序集,它定义了一个接口,接口的方法作...
阅读全文
摘要:反射是相当强大的一个机制,它允许在运行时发现并使用编译时还不了解的类型及其成员。但是,它也有下面两个缺点:1 、反射会造成编译时无法保证类型的安全性,由于反射要严重依赖于字符串,所以会丧失编译时类型安全。例如:假如执行Type.GetType(“Jef”);要求通过反射在一个程序中查找一个名为”Je...
阅读全文
摘要:众所周知,元数据时是用一系列表来存储的。生成一个程序集或模块时,编译器会创建一个类型定义表,一个字段定义表,一个方法定义表以及其他表。利用System.Reflection命名空间中包含的一些类型,可以写代码来反射这些元数据。实际上,这个命名空间中的类型为程序集或模块中包含的元数据创建了一个对象模型...
阅读全文
摘要:我们知道JIT编译器将方法的IL代码编译成本地代码时,会查看IL代码中引用了哪些类型。在运行时,JIT编译器利用程序集的TypeRef和AssemblyRef元数据表来确定哪一个程序集定义了所引用的类型。在AssemblyRef元数据表的记录项中,包含了构成程序集强名称的各个部分。JIT编译器获取所...
阅读全文
摘要:理解异常机制固然重要,但同等重要的是理解如何正确使用异常。我经常发现类库开发人员捕捉所有类型的异常,造成应用程序开发人员对问题不知情。本章就异常的使用提供一些指导原则。重要提示 如果你是类库开发人员,要设计供其他开发人员使用的类型,那么一定要严谨按照这些指导原则行事。你的责任非常重大,要精心设计类库...
阅读全文
摘要:面向对象编程极大的提升了开发人员的效率。开发效率的提升有很大一部分来源于可组合性,它使代码很容易编写、阅读、维护。例如下面的代码:Boolean f = "Jeff".Substring(1, 1).ToUpper().EndsWith("E");但上面代码有一个重要的前提:没有错误发生。而错误总是...
阅读全文
摘要:实现自己的方法时,如果方法无法完成方法名指定的任务,就应抛出一个异常,抛出异常时要考虑两个问题。第一个问题是抛出什么Exception派生类型。应选择一个有意义的类型。要考虑调用栈中位于高出的代码,要知道那些代码如何判断一个方法失败,以便执行一些得体的恢复代码。可直接利用FCL中定义好的一个类型,...
阅读全文
浙公网安备 33010602011771号