Если вы хотите передать подобные списку вещи подпрограммам, которые собираются их читать, но не записывают, можно определить общий ковариантный IReadableListинтерфейс, так что IReadableList может быть передан в процедуру, ожидающую IReadableList .К сожалению, обычные существующие реализации IList не реализуют ничего подобного, и поэтому единственный способ реализовать один из них - реализовать класс-оболочку (который может принимать IList в качестве параметра), но, вероятно, этого не произойдет.слишком сложно.Такой класс должен также реализовывать неуниверсальный IList, также как доступный только для чтения, чтобы позволить коду оценивать Count без необходимости знать тип элементов в списке.
Обратите внимание, что реализация объекта IReadableList не следует рассматривать как какое-либо обещание неизменности.Было бы вполне разумно иметь список чтения-записи или класс-оболочку, реализующий IReadableList , поскольку список чтения-записи читаемый .Невозможно использовать IReadableList для изменения списка, не приводя его к чему-либо другому, но нет гарантии, что список, переданный как IReadableList , не может быть изменен каким-либо другим способом, например, приведением его к чему-то другому.или с помощью ссылки, хранящейся в другом месте.