在泛型型別定義中,where 子句用於指定對下列型別的約束:這些型別可用作泛型宣告中定義的型別引數的實參。
例如,可以宣告乙個泛型類mygenericclass,這樣,型別引數 t 就可以實現 icomparable 介面:
public class mygenericclasswhere t:icomparable說明
有關查詢表示式中的 where 子句的更多資訊,請參見 where 子句(c# 參考)。
除了介面約束,where 子句還可以包括基類約束,以指出某個型別必須將指定的類作為基類(或者就是該類本身),才能用作該泛型型別的型別引數。
這樣的約束一經使用,就必須出現在該型別引數的所有其他約束之前。
c#
class myclasswhere t : classwhere 子句還可以包括建構函式約束。where u : struct
可以使用 new 運算子建立型別引數的例項;但型別引數為此必須受建構函式約束 new() 的約束。
new() 約束可以讓編譯器知道:提供的任何型別引數都必須具有可訪問的無引數(或缺省)建構函式。
例如:
c#
publicnew() 約束出現在 where 子句的最後。class mygenericclasswhere t : icomparable, new()
對於多個型別引數,每個型別引數都使用乙個 where 子句,例如:
c#
inte***ce imyinte***ce還可以將約束附加到泛型方法的型別引數,例如:class dictionarywhere tkey : icomparable, ienumerable
where tval : imyinte***ce
}
public bool mymethod(t t) where t : imyinte***ce請注意,對於委託和方法兩者來說,描述型別引數約束的語法是一樣的:
delegate t mydelegate() where t : new()有關泛型委託的資訊,請參見泛型委託。
有關約束的語法和用法的詳細資訊,請參見型別引數的約束。
c# 語言規範
有關詳細資訊,請參閱 c# 語言規範。該語言規範是 c# 語法和用法的權威資料。
請參見
參考泛型介紹(c# 程式設計指南)
new 約束(c# 參考)
型別引數的約束(c# 程式設計指南)
概念c# 程式設計指南
其他資源
c# 參考
where(泛型型別約束)
定義 在定義泛型的時候,我們可以使用 where 限制引數的範圍。使用 在使用泛型的時候,你必須尊守 where 限制引數的範圍,否則編譯不會通過。net支援的型別引數約束 where t struct t必須是乙個結構型別 where t class t必須是乙個class型別 where t n...
C 泛型 WHERE 約束
where 子句用於指定對下列型別的約束 這些型別可用作泛型宣告中定義的型別形參的實參。public class mygenericclass t wheret icomparable t實現icomparable介面 public void request listentitylist where...
where泛型約束
where用於指定型別約束,這些約束可以作為泛型宣告中定義的型別引數的變數.如下 public class mygenericclasswhere t icomparable 除了介面約束,where還可以包括基類約束,以指出某個型別必須將指定的類作為基類 或者就是該類本身 才能用作該泛型的型別引數...