2010-04-29 84 views
12

我在看的MvcContrib電網的源代碼,看看聲明爲類:類聲明中的關鍵字「where」在做什麼?

public class Grid<T> : IGrid<T> where T : class 

什麼是where T : class位呢?

+2

可能的重複http://stackoverflow.com/questions/221687/can-you-use-where-to-require-an-attribute-in-c – 2010-04-29 18:43:30

+2

@Jon Seigel - 絕對不是這個問題的重複。 – Oded 2010-04-29 20:04:54

回答

19

這是一個generic type constraint

在這種情況下,這意味着泛型類型(T)必須是引用類型,即類,接口,委託或數組類型。

列出了其他約束條件here

也可以限制所述類型從一個特定的類型(基類或接口)

+3

不,與從Object派生無關。例如,它可以是一個接口或委託。 – Gabe 2010-04-29 18:45:29

+0

@加貝 - 感謝您的糾正。答案已更新。 – Oded 2010-04-29 18:46:47

2

另一個例子是

public A<T> where T : AnInterface 

其中AnInterface是一個接口類。那意味着那個T必須實現這個接口。

這些約束很重要,以便編譯器知道對該類型有效的操作。例如,如果不告訴編譯器該類型提供的功能,則不能調用T的函數。

2

這是一個關於類型參數的約束,它說T可以是類或接口,但不是枚舉或結構。所以T必須是引用類型而不是值類型。

最好的問候,
奧利弗Hanappi

1

你可以申請限制應用到各種客戶端代碼可以使用,當它實例化你的類類型的參數類型被稱爲Constraints on Type Parameters

例如:其中T: class

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

1

這是一個通用類型約束。它指定T類型必須是引用類型,即類,而不是結構。

相關問題