泛型中的T相当于一个占位符,泛型类或者泛型方法相当于一个模板,当真正使用的时候,根据具体传入的类型创建另外一个真正的类,这分两种情况,如果是值类型,则每次都会创建一个新类,比如int,bool.即会创建两个不同的类型,如果再传入一个 int,则会沿用之前已经创建好的类。
另外一种情况是如果当类型是引用类型的时候,则只会创建一个类,但会另外开辟一块区域保存具体的类型。具体内部如果实现就不清楚了。
相应的,如果不想T代表所有的类型,则可以使用约束,如定义只限定值类型,或者引用类型, struct/class ,类是否可以实例化。
另外一点,在泛型类内部有时候可以需要得到某个类型的初始值,可以使用 default(T),即 default(int)=0,所有引用类型的初始值为null.