定義:在定義泛型的時候,我們可以使用 where 限制引數的範圍。
使用:在使用泛型的時候,你必須尊守 where 限制引數的範圍,否則編譯不會通過。
//.net支援的型別引數約束 :
//where t : struct | t必須是乙個結構型別
//where t : class | t必須是乙個class型別
//where t : new() | t必須要有乙個無參建構函式
//where t : nameofbaseclass | t必須繼承名為nameofbaseclass的類
//where t : nameofinte***ce | t必須實現名為nameofinte***ce的介面
六種型別的約束:
t:類(型別引數必須是引用型別;這一點也適用於任何類、介面、委託或陣列型別。)
1class myclass2
where t : class
///約束t引數必須為「引用 型別」
3where u : struct
///約束u引數必須為「值 型別」
4
t:結構(型別引數必須是值型別。可以指定除 nullable 以外的任何值型別。)
class myclasswhere t : class///約束t引數必須為「引用 型別」
where u : struct
///約束u引數必須為「值 型別」
t:new()(型別引數必須具有無引數的公共建構函式。當與其他約束一起使用時,new() 約束必須最後指定。)
class employeelistwhere t : employee, iemployee, system.icomparable, new()
t:《基類名》(型別引數必須是指定的基類或派生自指定的基類。)
publicclass
employee{}
public
class genericlistwhere t : employee
t:《介面名稱》(型別引數必須是指定的介面或實現指定的介面。可以指定多個介面約束。約束介面也可以是泛型的。)
//////介面
/// inte***ce
imyinte***ce
//////
定義的乙個字典型別
/// ///
///class dictionarywhere
tkey : icomparable, ienumerable
where
tval : imyinte***ce
}
t:u(為 t 提供的型別引數必須是為 u 提供的引數或派生自為 u 提供的引數。也就是說t和u的引數必須一樣)
class list}
可用於類、方法、委託
publicclass mygenericclasswhere
t:icomparable
public
bool mymethod(t t) where
t : imyinte***ce
delegate t mydelegate() where t : new
()
當只希望傳過來的泛型引數是限定範圍的,需要用到 where 來限定
比如希望是值型別,或者是引用型別,或者是繼承至某個型別、或者是符合某個接扣的型別,
where泛型約束
where用於指定型別約束,這些約束可以作為泛型宣告中定義的型別引數的變數.如下 public class mygenericclasswhere t icomparable 除了介面約束,where還可以包括基類約束,以指出某個型別必須將指定的類作為基類 或者就是該類本身 才能用作該泛型的型別引數...
where(泛型型別約束)(C 參考)
在泛型型別定義中,where 子句用於指定對下列型別的約束 這些型別可用作泛型宣告中定義的型別引數的實參。例如,可以宣告乙個泛型類mygenericclass,這樣,型別引數 t 就可以實現 icomparable 介面 public class mygenericclasswhere t icom...
C 泛型 WHERE 約束
where 子句用於指定對下列型別的約束 這些型別可用作泛型宣告中定義的型別形參的實參。public class mygenericclass t wheret icomparable t實現icomparable介面 public void request listentitylist where...