#包编写

【转】编写高质量代码改善C#程序的157个建议——建议53:必要时应将不再使用的对象引用赋值为null

 建议53:必要时应将不再使用的对象引用赋值为null在CLR托管的应用程序中,存在一个“根”的概念,类型的静态字段、方法参数、以及局部变量都可以作为“根”的存在(值类型不能作为“根”,只有引用类型的指针才能作为“根&rdqu...

【转】编写高质量代码改善C#程序的157个建议——建议52:及时释放资源

 建议52:及时释放资源垃圾回收机制自动为我们隐式地回收了资源(垃圾回收器会自动调用终结器),那我们为什么要主动释放资源呢?privatevoidbuttonOpen_Click(objectsender,EventArgse){  FileStreamfileStream=newFileStream(@"c...

【转】编写高质量代码改善C#程序的157个建议——建议51:具有可释放字段的类型或拥有本机资源的类型应该是可释放的

 建议51:具有可释放字段的类型或拥有本机资源的类型应该是可释放的在建议50中,我们将C#中的类型分为:普通类型和继承了IDisposable接口的非普通类型。非普通类型除了包含那些托管资源的类型外,本身还包含一个非普通类型的字段。在标准的Dispose模式中,我们对非普通类型举了一个例子:一个非普通类型An...

【转】编写高质量代码改善C#程序的157个建议——建议50:在Dispose模式中应区别对待托管资源和非托管资源

 建议50:在Dispose模式中应区别对待托管资源和非托管资源真正资源释放代码的那个虚方法是带一个bool参数的,带这个参数,是因为我们在资源释放时要区别对待托管资源和非托管资源。提供给调用者调用的显式释放资源的无参Dispose方法中,调用参数是true:publicvoidDispose(){//必须为...

【转】编写高质量代码改善C#程序的157个建议——建议49:在Dispose模式中应提取一个受保护的虚方法

 建议49:在Dispose模式中应提取一个受保护的虚方法在标准的Dispose模式中,真正的IDisposable接口的Dispose方法并没有做实际的清理工作,它其实是调用了下面的这个带bool参数且受保护的的虚方法:///<summary>///非密封类修饰用protectedvirtual...

【转】编写高质量代码改善C#程序的157个建议——建议48:Dispose方法应允许被多次调用

 建议48:Dispose方法应允许被多次调用一个类型的Dispose方法应该允许被多次调用而不抛出异常。鉴于此,类型内部维护了一个私有的bool变量disposed,如下:privatebooldisposed=false;在实际清理代码的方法中,加入一下判断:if(disposed){return;}//...

【转】编写高质量代码改善C#程序的157个建议——建议47:即使提供了显式释放方法,也应该在终结器中提供隐式清理

 建议47:即使提供了显式释放方法,也应该在终结器中提供隐式清理在标准的Dispose模式中,我们注意到一个以~开头的方法,如下:///<summary>///必须,防止程序员忘记了显式调用Dispose方法///</summary>~SampleClass(){//必须为falseD...

【转】编写高质量代码改善C#程序的157个建议——建议46:显式释放资源需继承接口IDisposable

 建议46:显式释放资源需继承接口IDisposableC#中的每一个类型都代表一种资源,资源分为两类:托管资源:由CLR管理分配和释放的资源,即从CLR里new出来的对象。非托管资源:不受CLR管理的对象,如Windows内核对象,或者文件、数据库连接、套接字、COOM对象等。如果我们的类型使用了非托管资源...

【转】编写高质量代码改善C#程序的157个建议——建议45:为泛型类型参数指定逆变

 建议45:为泛型类型参数指定逆变逆变是指方法的参数可以是委托或者泛型接口的参数类型的基类。FCL4.0中支持逆变的常用委托有:Func<intT,outTResult>Predicate<inT>常用委托有:IComparer<inT>下面例子演示了泛型类型参数指定逆变所...

【转】编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变

 建议44:理解委托中的协变委托中的泛型变量天然是部分支持协变的。为什么是“部分支持协变”?看下面示例:classProgram{publicdelegateTGetEmployeeHanlder<T>(stringname);staticvoidMain(){GetEmp...

【转】编写高质量代码改善C#程序的157个建议——建议43:让接口中的泛型参数支持协变

 建议43:让接口中的泛型参数支持协变除了上一建议中提到的使用泛型参数兼容接口不可变性外,还有一种办法是为接口中的泛型声明加上out关键字来支持协变,如下所示:interfaceISalary<outT>//使用out关键字{voidPay();}staticvoidMain(string[]ar...

【转】编写高质量代码改善C#程序的157个建议——建议42:使用泛型参数兼容泛型接口的不可变性

 建议42:使用泛型参数兼容泛型接口的不可变性让返回值类型返回比声明的类型派生程度更大的类型,就是“协变”。如:publicEmployeeGetAEmployee(stringname){Console.WriteLine("我是雇员:"+name);returnnewProgram...

【转】编写高质量代码改善C#程序的157个建议——建议41:实现标准的事件模型

 建议41:实现标准的事件模型上一建议中,我们实现了一个带事件通知的文件传输类FileUploader。虽然已经满足需求,但却不符合C#的编码规范,查看EventHandler的原型声明:publicdelegatevoidEventHandler(objectsender,EventArgse);我们应该知...

【转】编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护

 建议40:使用event关键字为委托施加保护在建议中我们实现了一个具有通知功能的文件传输类,如下:classFileUploader{publicdelegatevoidFileUploadedHandler(intprogress);publicFileUploadedHandlerFileUploade...

【转】编写高质量代码改善C#程序的157个建议——建议39:了解委托的实质

 建议39:了解委托的实质理解C#中的委托需要把握两个要点:1)委托是方法指针。2)委托是一个类,当对其进行实例化的时候,要将引用方法作为它的构造方法的参数。设想这样一个场景:在点对点文件传输过程当中,我们要设计一个文件传输类,该传输类起码要满足下面几项功能:传输问题件;按照百分制通知传输进度;传输类能够同时...
首页上一页...1718192021...下一页尾页