任何人都可以解释为什么不继承IList?我在这里看到很多输入,如果我需要为我的对象而不是IList提供自定义集合类,那么从Collection继承它会更好。这是为什么?为什么人们说不是从IList继承?如果可能的话请举个例子。
我认为它可能是这样的,所以为什么不使用它作为List提供更多功能:
class FootballTeam : List<FootballPlayer>
{
}
答案 0 :(得分:5)
这不提供直接答案,可能有概述
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>