泛型
泛型是framework2.0版本推出的,编译时候不确定类型(占位符),但是运行时候类型是确定的
严格来说不是语法糖,是因为框架升级支持的(既需要编译器升级,也需要clr升级),属于多态
完整运行过程
c#代码->编辑器编译->exe->CLR(运行)/JIT(再次编译)>机器码
泛型约束类型:
基类约束,
接口约束,
引用类型约束,
值类型约束,
无参数构造函数约束
可以有多个约束
协变逆变:都是跟泛型相关,只能放在接口或者委托的泛型参数前面
协变 :<out T> 简单说 就是可以让右边用子类 , T只能是返回结果,不能作为参数传递
IEnumerable<Parent> list1=new List<Parent>(); IEnumberable<Parent> list2=new List<Children>();
逆变:<in T> 右边的可以用父类,只能是参数