主要的约束类型如下:(如果按照约束实例化类,编译不能通过)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 ////T必须是值类型 2 //public class MyClass<T> where T:struct 3 //{ 4 5 //} 6 7 //T必须是引用类型 8 //public class MyClass<T> where T : class 9 //{ 10 11 //} 12 13 //T必须是Person或者Person的子类 14 //public class MyClass<T> where T : Person 15 //{ 16 17 //} 18 19 20 //T必须是某个接口类型,或者是实现了某个接口的类及其子类 这里的Person实现了某个接口 21 //public class MyClass<T> where T : Person 22 //{ 23 24 //} 25 26 //T必须是某个类或者其子类,并且有个无参构造函数 27 //public class MyClass<T> where T : Person,new() 28 //{ 29 30 //} 31 32 //对T没有要求,但是V必须是T的子类或者本身 33 public class MyClass<T,V> where T : V 34 { 35 36 }
如何断定同一个类的,不同泛型类型的对象,是不同的数据类型?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class MyClass<T> 2 { 3 4 }
上面的泛型类实例化后,怎么断定是不同类型的对象?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //如何判断mc,mc2的数据类型不同? 2 MyClass<int> mc = new MyClass<int>(); 3 4 MyClass<string> mc2 = new MyClass<string>();
反编译后发现,切换到IL语言后,发现他们的数据类型不同,即时编译(JIT)后,数据类型就会显示出来。