我想在c#中创建自定义列表。在我的自定义列表中,我只想创建自定义函数Add(T),其他方法应保持不变。
当我这样做时:
public class MyList<T> : List<T> {}
我只能覆盖3个功能:Equals
,GetHashCode
和ToString
。
当我这样做时
public class MyList<T> : IList<T> {}
我必须实施所有方法。
由于
答案 0 :(得分:6)
当我做公共课时MyList:IList {}
我必须实施所有方法。
是的,但这很简单......只需将呼叫发送到原始实施。
class MyList<T> : IList<T>
{
private List<T> list = new List<T>();
public void Add(T item)
{
// your implementation here
}
// Other methods
public void Clear() { list.Clear(); }
// etc...
}
答案 1 :(得分:2)
您可以让MyList
无意中调用List<T>
实施,除了添加(T),您使用Object Composition代替Class Inheritence,这也是GOF book的前言:“赞成'对象组成'超过'类继承'。” (Gang of Four 1995:20)
答案 2 :(得分:1)
使用new
关键字
public class MyList<T> : List<T>
{
public new void Add(T prm)
{
//my custom implementation.
}
}
错误:您仅限使用MyList
类型的内容。仅当Add
对象类型使用时,才会调用您自定义的MyList
。
好:使用这个简单的代码,您完成了:)
答案 3 :(得分:0)
您可以使用装饰器模式。做这样的事情:
public class MyList<T> : IList<T>
{
// Keep a normal list that does the job.
private List<T> m_List = new List<T>();
// Forward the method call to m_List.
public Insert(int index, T t) { m_List.Insert(index, t); }
public Add(T t)
{
// Your special handling.
}
}
答案 4 :(得分:0)
使用private List<T>
而不是继承,并根据需要实施您的方法。
编辑:按MyList
获取foreach
循环,您只想添加GetEnumerator()
method