2016-12-24 66 views
-2

在用於「編程在C#」認證從this書在物鏡2.1,其中示出了用於通用類型的以下代碼的製備:泛型在.NET 2.0:在類定義使用WHERE類

class MyClass<T> where T : class, new() 
{ 
    public MyClass() 
    { 
     MyProperty = new T(); 
    } 

    T MyProperty { get; set; } 
} 

我知道泛型是什麼類型,爲什麼我們需要它,但是任何人都可以解釋這個令人困惑的代碼,以及我們如何在任何示例中使用它。

回答

1

我想你不明白這個部分:

where T:class,new() 

這是說T必須是引用類型(即類),它必須有一個默認的構造函數(不帶參數的構造函數)。這意味着T不能是int,因爲它是一個結構。它也不能是StreamReader,因爲它沒有默認構造函數。

爲什麼這很有用?

有些東西只能與引用類型一起使用,但不能使用值類型,例如as。因爲你說T必須有一個默認的構造函數,你可以這樣做:

public MyClass() 
{ 
    MyProperty = new T(); 
} 
T MyProperty { get; set; } 

由於T必須有一個默認的構造函數,你可以調用new T()

+0

是啊,這這讓我困惑的第一部分(即其中T:類,新的()) 現在按照你的解釋假設我們有一個Person類像下面 類Person { 人(){ this.PersonName =「傑克」; } public string PersonName {get; set; } } 我們如何使用這個通用MyClass。 –

+1

由於'Person'是一個引用類型(一個類),它有一個默認的構造函數。它可以用作'MyClass'的泛型類型參數。你可以像這樣初始化它的一個實例:'var obj = new MyClass ()'。現在'obj.MyProperty'存儲一個名字爲「Jack」的人。 @UsmanHayatKhan – Sweeper

+0

你應該在你的答案中包括這個,因爲這可能是OP不理解的部分。 –