2011-01-11 44 views
1

對泛型中的類型T有可能強制實施一些限制嗎?.net:如何對泛型實施一些限制?

+0

這沒有意義。你想執行什麼樣的限制?希望執行在編譯時或運行時完成? – Gabe 2011-01-11 08:31:03

+2

他指的是我相信的泛型類型約束。 – 2011-01-11 08:37:16

回答

4

是的,你可以在T上施加一些限制。約束條件在where子句中引入。檢查here

where T: struct 

type參數必須是值類型。可以指定除Nullable以外的任何值類型。有關更多信息,請參閱使用可空類型(C#編程指南)。

where T: class 

type參數必須是引用類型;這也適用於任何類,接口,委託或數組類型。

where T : new() 

type參數必須具有公共無參數構造函數。與其他約束一起使用時,必須最後指定new()約束。

where T : <base class name> 

type參數必須是或從指定的基類派生。

where T : <interface name> 

type參數必須是或實現指定的接口。可以指定多個接口約束。約束接口也可以是通用的。

where T : U 

對於T提供的類型參數必須是或從U.

提供的參數導出
2

請參閱通用參數constraints。在創建您自己的泛型類型和方法時,您可以使用約束來應用有關類型參數的一些規則,例如它們支持所需的接口或具有默認構造函數。

3

基本上

public class MyClass<T> where T : ISomeInterface 

例如。很多現有的SO問題,如this one的額外細節。