Re[11]: Мнение: объектно-ориентированное программирование — к
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.10.19 12:13
Оценка:
Здравствуйте, artelk, Вы писали:

A>Название интерфейса вводит в заблуждение, согласен. Но в контракте у него прописано:

A>

A>Represents a read-only collection of elements that can be accessed by index.
A>The IReadOnlyList<T> represents a list in which the number and order of list elements is read-only. The content of list elements is not guaranteed to be read-only.


Я уже ответил, что этот пример плохой для рассмотрения и ты сам показал почему — изначально некорректный контракт. Это именно расширение, т.к. ты декларируешь две прямо противоположные вещи — список ReadOnly но в ём есть операции для модификации
Но в дотнете это не создаст большой проблемы, потому как контракт уже некорректный и используется абы как. Правильно было бы использовать такой IReadonlyList только массивах, и только таких, которые нельзя изменить никоим образом(Freezed или как там). Но в дотнете начался хаос и такую хрень распространили чуть не повсюду. Фактически, таким интерфейсом ограничиваются пермишны. Где надо обойти — запрашиваем IList и тут же модифицируем то, что по идее для чтения.

A>Допустим он назывался бы IListReadOnlyAccess, IReadableList или IListReader.


Я про контракт, он уже кривой шо сабля.

A>Мой вопрос остается в силе.


Я дал подобный ответ на примере IImmutableList — каким образом расширение интерфейса может всё сломать.

I>>Тогда такой пример — IImmutableList, который гарантирует неизменность. Всё иммутабельно и тд. А теперь наследуем этот интерфейс, скажем, IOptimizedList и вставляем туда методы FastRemove, FastAdd и тд, которые будут удалять по месту.

I>>Вроде ж всё хорошо — раз мы наследуем только интерфейс, то никаких подлянок ожидать не стоит. Гы-гы. Проверяем — передаем консумеру IImmutableList экземпляр IOptimizedList, он благополучно принимает и используем в своих целях. А мы тем временем модифицируем этот же инстанс.
I>>Итого — откуда грабли? Мы ж только интерфейс наследуем...
A>Это все очевидно и к вопросу не относится.

Это все тот же вопрос — как наследование интерфейсов может все сломать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.