一尘不染

如何覆盖列表C#中的Add方法?

c#

我目前正在寻找自己的收藏,就像一个普通的清单一样,只是它只能容纳10件物品。如果在列表中已经有10个项目时添加了一个项目,则在添加新项目之前将删除第一个项目。

我想做的是创建一个extends类,System.Collections.Generic.List<T>然后修改该Add(T item)方法以包括必要时删除第一项的功能。


阅读 287

收藏
2020-05-19

共1个答案

一尘不染

首先,您不能覆盖Add,并且对List仍然具有多态性,这意味着,如果您使用new关键字,并且您的类被强制转换为List,则不会调用新的Add方法。

其次,我建议您研究Queue类,因为您试图做的更多的是队列而不是列表。该类已针对您要执行的操作进行了优化,但没有任何大小限制器。

如果您确实希望某些东西像列表一样工作,但要像一个最大大小的队列一样工作,建议您实现IList并保留一个队列实例来存储元素。

例如:

public class LimitedQueue<T> : IList<T>
{
  public int MaxSize {get; set;}
  private Queue<T> Items = new Queue<T>();
  public void Add(T item)
  {
    Items.Enqueue(item);
    if(Items.Count == MaxSize)
    {
       Items.Dequeue();
    }
  }
  // I'll let you do the rest
}
2020-05-19