Наследование из списка или коллекции
Может ли кто-нибудь объяснить мне, почему не наследовать от IList? Я видел много вкладов здесь, что лучше наследовать от Collection, если мне нужно предоставить собственный класс коллекции для моего объекта, а не из IList. Почему это? Почему люди говорят, что они не наследуются от IList? Если возможно, сделайте пример.
я вижу, что это так нравится, поэтому почему бы не использовать его, поскольку List предоставляет больше возможностей:
class FootballTeam : List<FootballPlayer>
{
}
Это не дает прямого ответа, может иметь обзор
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 item), а затем 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, поэтому у вас будет большая гибкость.
лучше не делать этого и моделировать
class FootballTeam
{
public string TeamName;
public int RunningTotal
public IList<FootballPlayer> Players
}
вы обычно наследуете коллекцию, если хотите реализовать новый вид коллекции, такой как DiskCachedCollection или что-то еще
Это называется "Композиция над наследством" https://en.wikipedia.org/wiki/Composition_over_inheritance
Становится очевидным, почему, когда новое требование длится долго... "Мы хотим отслеживать руководство руководства командой". Внезапно вы идете хммм, как команда может быть коллекцией игроков и коллекцией управления. Ой! это не так, команда состоит из игроков и управления
Если вы собираетесь настроить интерфейс List или Collection, который его конкретный список реализации или коллекция не предоставляет, тогда реализуйте IList или ICollection inteface, иными словами, использовать любой список или коллекцию "Композиция лучше, чем наследование".