2012-04-24 61 views
1

應該如何理解下面的行?C# - 澄清'where T:new()'

public T Execute<t>(RestRequest request) where T : new() 

它是以下代碼的一部分。

public T Execute<t>(RestRequest request) where T : new() 
{ 
    var client = new RestClient(); 
    client.BaseUrl = BaseUrl; 
    request.RequestFormat = DataFormat.Json; 

    // Used on every request 
    request.AddParameter("country", "gb", ParameterType.UrlSegment); 

    var response = client.Execute<t>(request); 
    return response.Data; 
} 

而且還這樣一條:

公共類的RSSItems:列表{}

+1

[對類型參數的約束](http://msdn.microsoft.com/zh-cn/library/d5x73970(v = vs80).aspx ) – zerkms 2012-04-24 11:26:35

+0

你沒有使用這裏的約束 – 2012-04-24 11:27:43

+0

http://msdn.microsoft.com/en-us/library/sd2w2ew5.aspx – eandersson 2012-04-24 11:27:48

回答

0

你指定的T(通用型)必須有一個無參數ctr

+0

它只指定'T'必須有無參數的構造函數。這並不意味着它必須是一個參考類型。 – 2012-04-24 11:33:12

1

類型約束意味着T必須有一個參數少的構造函數。查看Constraints on Type Parameters

UPDATE
public class RssItems : List {}意味着RssItems繼承List MSDN文檔。請參閱Inheritance (C# Programming Guide)

+0

謝謝Xharze,你能告訴我這是什麼意思嗎?公共類RssItems:列表 {} – 2012-04-24 11:39:31

+0

@flybyte更新了答案 – Xharze 2012-04-24 12:05:10

4

當您處理泛型時,類型約束定義了您可以使用泛型的方法。該

where T : new() 

意味着它有一個參數的構造函數,使您可以使用代碼:

var something = new T(); 
在你的代碼

0

該方法將返回當類用創建其定義類型T的對象:

var x = new SomeClass<T>(); 

部分:T:新的()指類型參數必須具有公共參數構造。當與其他約束一起使用時,必須最後指定new()約束。您可以在MSDN頁面上查看'對類型參數的約束'