W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
默認情況下,類型參數(shù)可以用任何類型替換。
約束可以應(yīng)用于類型參數(shù),以需要更具體的類型參數(shù)。
這些是可能的約束:
where T : base-class // Base-class constraint where T : interface // Interface constraint where T : class // Reference-type constraint where T : struct // Value-type constraint (excludes Nullable types) where T : new() // Parameterless constructor constraint where U : T // Naked type constraint
在下面的例子中,GenericClass <T,U>要求T從Main派生并實現(xiàn)Interface1,并且要求U提供一個無參數(shù)的構(gòu)造函數(shù):
class Main {} interface Interface1 {} class GenericClass<T,U> where T : Main, Interface1 where U : new() { ... }
約束可以應(yīng)用于在方法和類型定義中定義類型參數(shù)的任何位置。
基類約束指定type參數(shù)必須對特定類進行子類化。
接口約束指定type參數(shù)必須實現(xiàn)該接口。
以下代碼顯示了如何編寫一個通用Max方法,該方法最多返回兩個值。
我們可以使用在框架中定義的通用接口IComparable <T>:
public interface IComparable<T> // Simplified version of interface { int CompareTo (T other); }
下面的代碼使用IComparable接口作為約束,我們可以寫一個Max方法如下:
static T Max <T> (T a, T b) where T : IComparable<T> { return a.CompareTo (b) > 0 ? a : b; }
Max方法可以接受任何類型的實現(xiàn)IComparable <T>的參數(shù):
int z = Max (5, 10); // 10 string last = Max ("A", "B");
泛型類可以像非類類一樣子類化。
子類可以保持基類的類型參數(shù)打開,如下例所示:
class Stack<T> {...} class SpecialStack<T> : Stack<T> {...}
或者子類可以使用具體類型關(guān)閉泛型類型參數(shù):
class IntStack : Stack<int> {...}
一個子類型還可以引入新的類型參數(shù):
class List<T> {...} class KeyedList<T,TKey> : List<T> {...}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: