1. 所谓泛型,即通过参数化类的类型来实现代码的复用。这句话比较拗口,言外之意就是声明将类型抽象化,通过参数来告诉类是什么类型,这样在JIT时候可以根据不同的类型参数,产生不同的类型实例。如:声明Stack <t>泛型后,可以用Stack<int> x = new Stack<int>()来实例化;
2. 泛型的好处有4点: a. 是赋予代码更强的类型安全,b. 代码复用 c. 更高的效率 d. 更清晰的约束。
3. 泛型的机制:a. 第一轮编译时,编译器只为Stack<T>(栈算法)类型产生“泛型版”的IL代码与元数据-----并不进行泛型类型的实例化,T在中间只充当占位符
b. JIT编译时,当JIT编译器第一次遇到Stack<int>时,将用int替换“泛型版”IL代码与元数据中的T---进行泛型类型的实例化。CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码;但如果类型参数为“值类型”,对每一个不同的“值类型”,CLR将为其产生一份独立的代码。
。
4. CLR为所有类型参数为“引用类型”的泛型类型产生统一份代码,但是对于“值类型”的参数,则每个不同的值类型参生一份独立的代码。