显然,泛型的主要作用就是定义泛型的引用类型和值类型。
然而对泛型接口的支持对CLR来说也很重要。
没有泛型接口,每次用非泛型接口如IComparable来操作值类型都会发生装箱,而且会失去编译时的类型安全性。
这将严重制约泛型类型的应用范围,因此CLR提供了对泛型接口的支持。
引用类型和值类型可以指定类型实参实现泛型接口,也可以保持类型实参的未指定状态来实现泛型接口。
以下泛型接口定义是FCL的一部分:
public interface IEnumerator<T>:IDisposable,IEnumerator{ T Current{get;} }
指定类型实参的实现
下面的示例类型实现了上述泛型接口,而且指定了类型实参。
注意Triangle对象可枚举一组Point对象。还要注意,Current属性只有Point数据类型。
internal sealed class Triangle<T>:IEnumerator<Point>{ private Point[] m_array; //IEnumerator<T>的Current属性是Point类型 public Point Current{get{...}} ... }
未指定类型实参的实现
下例实现了相同的泛型接口,但保持类型实参的未指定状态:
internal sealed class ArrayEnumerator<T>:IEnumerator<T>{ private T[] m_array; //IEnumerator<T>的Current属性是T类型 public T Current{get{...}} ... }
原文:https://www.cnblogs.com/errornull/p/9902564.html