Насколько я понимаю, всегда следует пытаться вернуть интерфейс через конкретный класс. Не буду вдаваться в причины, об этом уже много написано в SO.
Однако в случае IReadOnlyCollection и ReadOnlyCollection Я не уверен, следует ли следовать этому правилу.
IReadOnlyCollection можно легко преобразовать в список, что.. . хорошо... нарушает аспект ReadOnly, обещанный контрактом.
Код: Выделить всё
ReadOnlyCollection
Так что даже если пользователь решает отменить его на что -то еще (в случае с Iradonly*< /code> Obj Readonly* object), на самом деле нет никакого способа, чтобы класс, разоблачающий readonly*/ireadonly* объект, примет это обратно.
Итак, какова рекомендация здесь, вернуть интерфейс Iradonly* или конкретный readonly* экземпляр класса?
Подробнее здесь: https://stackoverflow.com/questions/451 ... collection