2012-11-30 134 views
1

我正在使用泛型類和約束條件。以下是我的課程。泛型類和約束條件

public class GenericList<T> where T : new() 
    { 

     private Node head; 

     // constructor 
     public GenericList() 
     { 
      head = null; 
     } 

    } 

當我與整數創建對象,它工作正常

GenericList<int> list = new GenericList<int>(); 

但是,當我用繩子嘗試它給了我下面的編譯時錯誤。

GenericList<string> list1 = new GenericList<string>(); 

「字符串」必須是一個非抽象類型,以便在通用類型或方法「GenericTest.GenericList」 還當我過去的基準參數,以使用它作爲參數「T」的公開參數構造像任何自定義類,它工作正常。

字符串的問題是什麼?

+1

康斯坦丁已經解釋了爲什麼它會失敗 - 但爲什麼你對T開頭的約束呢?你想什麼時候調用'new T()'?這就是所有的約束條件。 –

+0

這些都沒有解釋爲什麼你想要無參數的構造函數約束。再次,你想在'GenericList'內調用'new T()'? –

回答

2

這是毫無意義的String類型有公共的無參數的構造函數,因爲String不變,這意味着如果String會對這個構造,然後它會創建一個空的字符串對象,這僅僅是愚蠢的,因爲創建後你不能改變它。