远征军之生命线:泛型Where几种情况 - 鹏飞的专栏 - CSDN博客

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 00:23:37

泛型的Where  泛型的Where能够对类型参数作出限定。有以下几种方式。  l         where T : struct   限制类型参数T必须继承自System.ValueType。  l         where T : class    限制类型参数T必须是引用类型,也就是不能继承自System.ValueType。  l         where T : new()   限制类型参数T必须有一个缺省的构造函数  l         where T : NameOfClass 限制类型参数T必须继承自某个类或实现某个接口。  以上这些限定可以组合使用,比如:  public class Point where T : class, IComparable, new()     泛型的机制  l  机制: C#泛型代码在被编译为IL代码和无数据时,采用特殊的占位符来表示泛型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以on-demand的方式,发生在JIT编译时。  l  编译机制:  1.第一轮编译时,编译器只为Stack(栈算法)类型产生“泛型版”的IL代码与元数据-----并不进行泛型类型的实例化,T在中间只充当占位符  2. JIT编译时,当JIT编译器第一次遇到Stack时,将用int替换“泛型版”IL代码与元数据中的T---进行泛型类型的实例化。CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码;但如果类型参数为“值类型”,对每一个不同的“值类型”,CLR将为其产生一份独立的代码。     泛型的一些问题  l 不支持操作符重载。我只知道这么多了     范型的意义  泛型的意义何在?类型安全和减少装箱、拆箱并不是泛型的意义,而是泛型带来的两个好处而已(或许在.net泛型中,这是最明显的好处了)。泛型的意义在于 ——把类型作为参数,它实现了代码之间的很好的横向联系,我们知道继承为代码提供了一种从上往下的纵向联系,但泛型提供了方便的横向联系(从某种程度上说,它和AOP在思想上有相通之处)。在PersonCollection例子中,我们知道Add()方法和Remove()方法的参数类型相同,但我们明确无法告诉我们的程序这一点,泛型提供了一种机制,让程序知道这些。道理虽然简单,但这样的机制或许能给我们的程序带来一些深远的变化吧。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/navy235/archive/2010/11/09/5997916.aspx