1、泛型类、泛型方法、泛型接口、泛型委托。
2、用到的设计思想:延迟声明(能推迟做的事情就尽量推迟做)。
3、语法糖:编译器自动帮我们识别类型,泛型不是简单的语法糖,它是框架升级和语法糖的双重结果。
4、泛型就是用一个东西来满足多种不同类型的需求的。
5、引入泛型前使用object作为类型参数有2个问题
1)、装箱拆箱,性能损耗。传入一个int值(栈) ,object又在堆里面,如果把int传递进来,就会把值从栈里面copy到堆里(装箱)。使用的时候,又需要用对象值,又会copy到栈(拆箱)。
2)、类型安全问题,可能会有,因为传递的对象是没有限制的。
6、泛型约束
/* * 五种约束: * * where T:struct 值类型约束:类型参数必须为值类型 * * where T:class 引用类型约束:适用于类、接口、委托、数组等,类型参数必须为引用类型 * * where T:new() new()无参构造器约束:类型参数必须有一个公有的无参构造器 * * where T:<base class name> 基类约束:类型参数必须是指定的基类或是派生自指定的基类 * * where T:<interface> 接口约束:类型参数必须是指定接口或实现指定的接口,可以指定多个接口约束,约束接口也可以是泛型的 * * * 组合约束:用的不多 * 在约束列表中,第一个必须是引用类型约束或者值类型约束,或者是基类约束,然后才是接口约束,最后才是new()约束 * 指定引用类型约束或值类型约束的同时也指定基类约束是非法的 * * 同一个类型形参可以使用多个约束,中间用逗号隔开,例如: * class Test<T> where T : Myclass, Interface, new(){......} * 替换T的类型实参必须是继承Myclass类,且实现Interface接口,且拥有一个无参构造器 * * 在使用两个或多个类型形参时,也可以使用多条where子句分别为它们指定约束 */
原文:https://www.cnblogs.com/xyh9039/p/12549366.html