.Net Framework 1.0的时候还在用object装箱,.Net Framework 2.0的加入了泛型。这不是语法糖,而是由框架升级提供的功能。
声明方法的时候没有指定类型,而是在调用的时候指定。这样的好处有哪些?
一、泛型方法
1、延迟声明:把参数类型的声明推迟到调用
2、延迟思想:推迟一切可以推迟的
3、又叫马儿跑、又叫马儿不吃草:泛型方法性能上和普通方法上是一致的,并没有变好或者变差,在JIT的时候才确定是何种类型。
Common和泛型差不多,Object明显不如前面两个。为什么呢?Object是引用类型,分配在堆里的,有一个装箱拆箱的动作,所以慢一点。
4、泛型类的静态字段,是独立的。从性能一般的字典缓存升级到泛型缓存
public static T DoNothing<T>(T tParameter)
where T: InterfaceXX //接口约束
where T: class //引用类型约束
where T: struct //值类型约束
where T: new() //无参数构造函数约束
where T : class
{
return default(T);//会根据T的类型,去产生一个默认值;
}
二、泛型类
1、解决不同类型,相同方法的重用
2、带来权利,可以使用基类里面的属性和方法
3、带来义务,类型参数必须是基类或者子类
三、泛型接口
四、泛型委托
五、协变逆变(接口、方法、委托都可以用协变逆变)
1、只能放在接口或者委托的泛型参数前面
public interface IEnumerable<out T>
out 协变covariant 修饰返回值,消除List<父类> l=new List<子类>时编译器不通过的问题
in 逆变contravariant 修饰传入参数,强制<子类> = <父类>的参数必须是子类的bug