CLR via C#學習筆記-第十二章-泛型接口、委托
阿新 • • 發佈:2018-11-04
pre 類型安全 sealed 2.4 span 接口 triangle 泛型類 保持
12.3 泛型接口
泛型接口的意義
顯然,泛型的主要作用就是定義泛型的引用類型和值類型。
然而對泛型接口的支持對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{...}} ... }
12.4 泛型委托
12.5 委托和接口的逆變和斜變泛型類型實參
CLR via C#學習筆記-第十二章-泛型接口、委托