从List或Collection继承

时间:2017-01-19 02:32:40

标签: c# vb.net

任何人都可以解释为什么不继承IList?我在这里看到很多输入,如果我需要为我的对象而不是IList提供自定义集合类,那么从Collection继承它会更好。这是为什么?为什么人们说不是从IList继承?如果可能的话请举个例子。

我认为它可能是这样的,所以为什么不使用它作为List提供更多功能:

class FootballTeam : List<FootballPlayer> 
{ 
}

3 个答案:

答案 0 :(得分:5)

overview of collection interface.

这不提供直接答案,可能有概述

IList为您提供实现此功能的灵活性。

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
{
    T this[int index] { get; set; }

    int IndexOf(T item);
    void Insert(int index, T item);
    void RemoveAt(int index);
}
  

如果您使用class FootballTeam : List<FootballPlayer>,则可以扩展   您的FootballTeam类中的属性。

理想情况下,当您想要扩展您的收藏时,它是必要的。假设您必须实现AddSort(T项),然后class FootballTeam : List<FootballPlayer>

  

如果你使用class FootballTeam : ILIst<FootballPlayer>,你可能会   重新发明Add()Contains()应该是的轮子   由你自己实施

我建议使用Composition over inheritance

class FootballTeam : //So here can use any team base class or anything necessary
{ 
  public string TeamName; 
  public int RunningTotal 

  private List<FootballPlayer> _players
  public IEnumerable<FootballPlayer> Players {get;set;}
}

<强>更新 我已将Players更新为IEnumerable,因此具有很大的灵活性。

答案 1 :(得分:2)

最好不要这样做并将其建模为

class FootballTeam
{ 
    public string TeamName; 
    public int RunningTotal 
    public IList<FootballPlayer> Players
}
如果你想实现像DiskCachedCollection这样的新类型的集合,你通常会继承一个集合

这被称为&#34;组合而不是继承&#34; https://en.wikipedia.org/wiki/Composition_over_inheritance

很明显,为什么新的要求需要很长时间......&#34;我们希望跟踪管理人员对抗团队&#34;。突然间,你去了嗯,团队如何成为一个球员集合和管理集合。哦!不是,一个团队由球员和管理层组成

答案 2 :(得分:-1)

如果要定制其具体实现List或Collection未提供的List或Collection接口,那么请实现IList或ICollection接口,否则使用任何列表或集合“Composition is better than inheritence”。< / p>