C#中的自定义列表

时间:2011-09-25 10:53:11

标签: c# generics inheritance collections

我想在c#中创建自定义列表。在我的自定义列表中,我只想创建自定义函数Add(T),其他方法应保持不变。

当我这样做时:

public class MyList<T> : List<T> {}

我只能覆盖3个功能:EqualsGetHashCodeToString

当我这样做时

public class MyList<T> : IList<T> {}

我必须实施所有方法。

由于

5 个答案:

答案 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