2010-02-12 153 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); 
    } 
}