Подумайте, если вы определяете только интерфейс IList
, вам нужны классы для его реализации.List
- это только одна из таких реализаций, по умолчанию, если хотите.
С другой стороны, если бы у вас был только список в качестве абстрактного класса (то есть без интерфейса IList
), то все ваши пользовательские классы коллекции списков должны были бы наследоваться.Я бы сказал, что это был бы неудачный выбор дизайна, поскольку члены IList
больше подходят для контрактов (отдельные методы добавления / удаления могут иметь разные реализации, например, список приоритетов и т. Д.).Сделав List доступным как абстрактный класс, вы будете вынуждать и контролировать выбор дизайна людей.
Кроме того, в C # вы будете дополнительно ограничены, чтобы не иметь возможности наследовать от любого другого класса для ваших пользовательских коллекций.
По сути, вы должны попытаться увидеть различные функции, предлагаемые интерфейсом и абстрактным классом.Это поможет вам понять разницу между IList и List.