《Effective C#》笔记(3)
只定义刚好够用的约束条件 泛型约束可以规定一个泛型类必须采用什么样的类型参数才能够正常地运作。设定约束条件的时候,太宽或太严都不合适。 如果根本就不加约束,那么程序必须在运行的时候做很多检查,并执行更多的强制类型转换操作。而且在编译器为这个泛型类型的定义生成IL码的时候,通过约束还可以为提供更多的提示,如果你不给出任何提示,那么编译器就只好假设这些类型参数所表示的都是最为基本的System.Object,也就是假设将来的实际类型只支持由System.Object所公布的那些方法,这使得凡是没有定义在System.Object里面的用法全都会令编译器报错,甚至连最为基本的new T()等操作也不支持。 但添加约束的时候也不要过分严格,以至于限制了泛型类的使用范围,只添加确实有必要的约束即可。 创建泛型类时,应该给实现了IDisposable的类型参数提供支持 如果在泛型类里面根据类型参数创建了实例,那么就应该判断该实例所属的类型是否实现了IDisposable接口。如果实现了,就必须编写相关的代码,以防程序在离开泛型类之后发生资源泄漏。这还要分不同的情况: 泛型类的方法根据类型参数所表示的类型来创建实例并使用该实例 类似下面的写法,如果T是非托管资源,那么就会造成内存泄露: public interface IEngine { void DoWork(); } public