Почему класс List реализует интерфейс IList? - PullRequest
0 голосов
/ 28 февраля 2019

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

Может кто-нибудь объяснить мне причину?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Каждый класс может быть получен только из одного класса, но с несколькими интерфейсами.
Зачем нам нужно несколько интерфейсов?
Обычно есть две причины, по которым у нас есть несколько интерфейсов для одного класса, ** 1005 1.Один класс может иметь разные типы поведения , 2.Открытый-Закрытый Принцип .
Краткое определение для Интерфейса: Интерфейс - это сущность, которая определяет, как должны вести себя производные классы, и, поскольку существуют разные типы поведения, нам нужны возможные разные Интерфейсы для каждого класса.
Более того, согласно 2-му принципу SOLID, который является сокращением от принципа Open-Closed, что означает, что сущности должны быть открыты для расширений, но закрыты для изменений, даже если вы хотите добавить новое поведение (например, CanBark) копределенного класса, и у вас уже есть соответствующий интерфейс (IDogActions) для него как родительского класса, рекомендуется не изменять интерфейс IDogActions, поскольку может быть много других классов, реализующих этот интерфейс, и вам не нужноновое действие, вместо этого вы можете создать новый интерфейс (например, IDogAuditoryActions).

0 голосов
/ 28 февраля 2019

Подумайте, если вы определяете только интерфейс IList, вам нужны классы для его реализации.List - это только одна из таких реализаций, по умолчанию, если хотите.

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

Кроме того, в C # вы будете дополнительно ограничены, чтобы не иметь возможности наследовать от любого другого класса для ваших пользовательских коллекций.

По сути, вы должны попытаться увидеть различные функции, предлагаемые интерфейсом и абстрактным классом.Это поможет вам понять разницу между IList и List.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...