任何人都可以解釋我爲什麼不從IList繼承?我在這裏看到很多輸入,如果我需要爲我的對象提供自定義集合類,而不是從IList中繼承,那麼最好從Collection繼承。這是爲什麼?爲什麼人們說不從IList繼承?如果可能的話,請舉個例子。從列表或集合繼承
我看到它可能喜歡這個,爲什麼不把它作爲列表提供更多的功能:
class FootballTeam : List<FootballPlayer>
{
}
任何人都可以解釋我爲什麼不從IList繼承?我在這裏看到很多輸入,如果我需要爲我的對象提供自定義集合類,而不是從IList中繼承,那麼最好從Collection繼承。這是爲什麼?爲什麼人們說不從IList繼承?如果可能的話,請舉個例子。從列表或集合繼承
我看到它可能喜歡這個,爲什麼不把它作爲列表提供更多的功能:
class FootballTeam : List<FootballPlayer>
{
}
最好不要做這一切,它像
class FootballTeam
{
public string TeamName;
public int RunningTotal
public IList<FootballPlayer> Players
}
建模你通常如果您想實現像DiskCachedCollection之類的新類集合,則繼承集合
這被稱爲「構成對繼承」https://en.wikipedia.org/wiki/Composition_over_inheritance
很明顯,爲什麼當一個新的需求變得很長時......「我們想跟蹤一個團隊的管理人員」。突然間,你會哼哼,一個團隊怎麼能成爲一個球員和管理集合的集合。哦!它不是,一個團隊由玩家和管理層組成
如果您要定製其具體實現List或Collection不提供的List或Collection接口,那麼請執行IList或ICollection接口,否則使用任何列表或集合「構成比繼承更好」。
這並不提供直接的答案,可能有概述
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;}
}
更新 我已經更新了IEnumerable的Players
,所以會有很大的靈活性。
如果你需要一些自定義功能,那麼你需要從IList接口實現,在這種情況下,你必須實現接口的所有方法,但在提供的代碼片段中,你只是添加兩個屬性到列表
** [收藏指南](https://msdn.microsoft.com/en-us/library/dn169389(v = vs.110).aspx)** – Plutonix
請參閱[爲什麼不從列表繼承?]( http://stackoverflow.com/q/21692193/719186) –
LarsTech