2010-02-12 150 views
1

例子:我可以使用基類的實例初始化派生類嗎?

public class MyList<T> : List<T> { 
    public MyList(List<T> list) { 
     this = list; // this is basically what I want, but doesn't work 
     base = list; // this also doesn't work 
    } 
} 

任何解決方案?或者,我正在努力實現一個糟糕的主意?

動機:我想將自定義函數添加到List對象。

+0

對於未來的個人參考:擴展方法並不是那麼棒。從MSDN開始:「在你的代碼中,你用實例方法的語法調用了擴展方法,但是編譯器生成的中間語言(IL)將你的代碼轉換爲靜態方法中的一個調用,所以封裝的原理並不是真的存在事實上,擴展方法不能以它們擴展的類型訪問私有變量。「 即,它只是在實例上調用一個靜態函數,但語法上是糖衣。 – 2010-02-17 22:07:47

回答

1

你能不能做:

public MyList(List<T> list) : base(list) 

另外,不能使用List對象上的擴展方法?

+0

好吧,我會!是的,就是這麼簡單!謝謝! 至於擴展方法,我敢肯定我也可以使用這些方法,但直到現在我才知道它們是什麼...... 我將閱讀擴展方法並稍後決定如何實現它。再次感謝! – 2010-02-12 11:37:41

3

如果您使用.Net framework 3.5,那麼在列表中定義擴展方法會不會更容易?財產以後像...

public static class MyListExtensionClass 
{ 
    public static void MyList<T>(this List<T> list) 
    { 
     // Your stuff 
    } 
} 
+1

完全是這樣做的擴展方法! – 2010-02-12 11:38:12

+0

在某些情況下,這肯定是要走的路。感謝這個簡單的例子。 – 2010-02-12 11:42:45

0

公共MYLIST(名單列表):基地(名單)

這將調用基類的構造函數如下(在這種情況下列表):

public List(IEnumerable<T> collection); 
0
public class MyList<T> : List<T> 
{ 
    public MyList(List<T> list) 
    { 
    AddRange(list); 
    } 
}