泛型
泛型,最常见的就是List<>,泛型集合,有时候觉的List<object>不一样吗?大微软为什么还会费劲心思在C#2.0的时候会添加此特性呢?
减少代码重复性,比如一个方法仅仅是参数列表不同或者是返回值不同里面处理问题逻辑是一样的话就可以用到泛型,类型的安全和提高性能,例如避免装箱拆箱的操作
泛型包含泛型方法,泛型类,泛型接口,泛型委托。不包含事件,构造器,属性等成员。
泛型还包括几个关键字.
1.where:指定T是什么类型 class是引用类型也就是T必须是引用类型才可以编译通过。where关键字的作用就是来约束T的类型
protected T GetT<T>(T model) where T:class{ //doSomething }
2.new()表示T有无参的构造函数可以被实例化
protected T GetT<T>(T model) where T:new(){ //doSomething }
3.default 返回默认值如果是值类型返回0,引用类型返回Null
private T GetT<T>(T model){ return default(T); }
泛型约束常见问题:重写泛型方法时应注意,重写的方法必须和基类保持一致数量的参数,并且约束同样奏效,不能够再次指定
泛型还有的作用是可验证性,第一 泛型参数被指定为null时会error,因为它可能是不能为null的值类型。
第二 泛型类型的转型 列如
public void TestMethod<T>(T model) { int x = (int)model; }
会抛出异常,因为编译器不知道T最终是什么类型所以无法保证转换成功。如果需要可以使用as进行转换。