摘要: 构建可扩展的应用程序时,接口是中心。可用基类来代替接口,但接口通常是首选的,因为它允许加载项开发人员选择他们自己的基类。例如,假如你要写一个应用程序,它能无缝的加载和使用别人创建的类型。下面描述了如何设计这样的应用程序。创建一个“宿主SDK”(Host SDK)程序集,它定义了一个接口,接口的方法作... 阅读全文
posted @ 2015-06-14 20:16 -祐扌戒恉- 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 反射是相当强大的一个机制,它允许在运行时发现并使用编译时还不了解的类型及其成员。但是,它也有下面两个缺点:1 、反射会造成编译时无法保证类型的安全性,由于反射要严重依赖于字符串,所以会丧失编译时类型安全。例如:假如执行Type.GetType(“Jef”);要求通过反射在一个程序中查找一个名为”Je... 阅读全文
posted @ 2015-06-14 15:30 -祐扌戒恉- 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 众所周知,元数据时是用一系列表来存储的。生成一个程序集或模块时,编译器会创建一个类型定义表,一个字段定义表,一个方法定义表以及其他表。利用System.Reflection命名空间中包含的一些类型,可以写代码来反射这些元数据。实际上,这个命名空间中的类型为程序集或模块中包含的元数据创建了一个对象模型... 阅读全文
posted @ 2015-06-13 16:55 -祐扌戒恉- 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 我们知道JIT编译器将方法的IL代码编译成本地代码时,会查看IL代码中引用了哪些类型。在运行时,JIT编译器利用程序集的TypeRef和AssemblyRef元数据表来确定哪一个程序集定义了所引用的类型。在AssemblyRef元数据表的记录项中,包含了构成程序集强名称的各个部分。JIT编译器获取所... 阅读全文
posted @ 2015-06-13 14:33 -祐扌戒恉- 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 理解异常机制固然重要,但同等重要的是理解如何正确使用异常。我经常发现类库开发人员捕捉所有类型的异常,造成应用程序开发人员对问题不知情。本章就异常的使用提供一些指导原则。重要提示 如果你是类库开发人员,要设计供其他开发人员使用的类型,那么一定要严谨按照这些指导原则行事。你的责任非常重大,要精心设计类库... 阅读全文
posted @ 2015-06-01 22:01 -祐扌戒恉- 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 面向对象编程极大的提升了开发人员的效率。开发效率的提升有很大一部分来源于可组合性,它使代码很容易编写、阅读、维护。例如下面的代码:Boolean f = "Jeff".Substring(1, 1).ToUpper().EndsWith("E");但上面代码有一个重要的前提:没有错误发生。而错误总是... 阅读全文
posted @ 2015-06-01 21:02 -祐扌戒恉- 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 实现自己的方法时,如果方法无法完成方法名指定的任务,就应抛出一个异常,抛出异常时要考虑两个问题。第一个问题是抛出什么Exception派生类型。应选择一个有意义的类型。要考虑调用栈中位于高出的代码,要知道那些代码如何判断一个方法失败,以便执行一些得体的恢复代码。可直接利用FCL中定义好的一个类型,... 阅读全文
posted @ 2015-06-01 20:24 -祐扌戒恉- 阅读(167) 评论(0) 推荐(0) 编辑
摘要: CLR允许异常抛出任何类型的实例,从Int32到String都可以。但是,Microsoft决定不强迫所有编程语言都抛出和捕捉任何类型的异常。因此,他们定义了System.Exception类型,并规定所有CLS相容的编程语言都必须能抛出和捕捉该类型的异常。派生自System.Exception的异... 阅读全文
posted @ 2015-05-31 21:37 -祐扌戒恉- 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 本节将介绍异常处理的机制,以及进行异常处理所需的C#构造。但是,这里不准备过多的讨论细节。本章旨在提供一些在代码中何时以及如何使用使用异常处理的指导原则。想要更多的了解异常处理机制和相关的C#语言构造,请参见.NET FrameWork文档和C#语言规范。另外,.NET Framework异常处理机... 阅读全文
posted @ 2015-05-31 13:43 -祐扌戒恉- 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 设计类型时,首先要想好类型的各种使用情况。类型名称通常是一个名词,例如FileStream或者StringBuilder。然后,要为类型定义属性、方法、事件等。这些成员的定义方式就是类型的编程接口。这些成员代表类本身或者类型实例可以执行的动作。行动成员通常用动词表示,例如Read,Write,Flu... 阅读全文
posted @ 2015-05-30 23:28 -祐扌戒恉- 阅读(138) 评论(0) 推荐(0) 编辑