Наследование из списка или коллекции

61
2

Может ли кто-нибудь объяснить мне, почему не наследовать от IList? Я видел много вкладов здесь, что лучше наследовать от Collection, если мне нужно предоставить собственный класс коллекции для моего объекта, а не из IList. Почему это? Почему люди говорят, что они не наследуются от IList? Если возможно, сделайте пример.

я вижу, что это так нравится, поэтому почему бы не использовать его, поскольку List предоставляет больше возможностей:

class FootballTeam : List<FootballPlayer> 
{
}

спросил(а) 2021-01-19T15:14:20+03:00 2 месяца, 3 недели назад
1
Решение
97

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 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, поэтому у вас будет большая гибкость.

ответил(а) 2021-01-19T15:14:20+03:00 2 месяца, 3 недели назад
75

лучше не делать этого и моделировать

class FootballTeam
{
public string TeamName;
public int RunningTotal
public IList<FootballPlayer> Players
}

вы обычно наследуете коллекцию, если хотите реализовать новый вид коллекции, такой как DiskCachedCollection или что-то еще

Это называется "Композиция над наследством" https://en.wikipedia.org/wiki/Composition_over_inheritance

Становится очевидным, почему, когда новое требование длится долго... "Мы хотим отслеживать руководство руководства командой". Внезапно вы идете хммм, как команда может быть коллекцией игроков и коллекцией управления. Ой! это не так, команда состоит из игроков и управления

ответил(а) 2021-01-19T15:14:20+03:00 2 месяца, 3 недели назад
-4

Если вы собираетесь настроить интерфейс List или Collection, который его конкретный список реализации или коллекция не предоставляет, тогда реализуйте IList или ICollection inteface, иными словами, использовать любой список или коллекцию "Композиция лучше, чем наследование".

ответил(а) 2021-01-19T15:14:20+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема