stack<int> stackone = new stack<int>(); stack<int> stacktwo = new stack<int>(); 但是,如果在程序代码中的其他位置又创建了一个 stack 类,并使用不同的值类型(例如长整型或用户定义的结构)作为其参数,则运行时将生成其他形式的泛型,而这时会替换 il 相应位置中的长整型参数。为使用值类型构造的泛型创建专用类的优点是可以获得更好的性能。毕竟每个专用的泛型类都是在“本地”包含值类型,因此不必再进行转换。
泛型与引用类型的工作方式稍有不同。首次使用任何引用类型构造泛型时,运行时用对象引用替换 il 中的参数来创建专用的泛型。之后,每当使用引用类型作为参数实例化构造的类型时,无论构造的是何种类型,运行时都会重复使用先前创建的专用泛型。
例如,假设有两个引用类型,customer 类和 order 类,并进一步假设您创建了 customer 类型的 stack:
public class list { internal object[] elements; internal int count;
public listenumerator getenumerator() { return new listenumerator(this); } } 所创建的 listenumerator 对象不仅必须实现 current 属性和 movenext 方法,而且还必须维护其内部状态,以便程序在每次执行该循环时都可以移到下一项。此内部状态机对于 list 数据结构而言比较简单,但对于需要递归循环的数据结构(例如二叉树)来说,该状态机将相当复杂。
定义迭代程序 由于迭代程序是 foreach 循环结构的逻辑对应物,因此其定义方式类似于函数:使用 foreach 关键字并在后面带有一对圆括号。在以下示例中,程序将为 list 类型声明一个迭代程序。迭代程序的返回类型由用户决定,但是由于 list 类内部存储的是对象类型,因此以下迭代程序示例的返回类型为对象:
public class list { internal object[] elements; internal int count;