Здравствуйте, Shmj, Вы писали:
S>Вы делаете библиотеку и один из методов вашей либы возвращает список файлов, для примера. Какой тип вы вернете?
S>К примеру, Directory.GetFiles() возвращает string[]. Насколько это правильно? Ведь потом кто-то может модифицировать и написать files[0] = "???". Нарушается сама суть — этот список не подлежит изменению.
Вполне правильно. Метод Directory.GetFiles() гарантирует то, что он вернет коллекцию адекватную (на какой-то момент времени в прошлом). Есть гарантии, что получатель ответа (вызвавший Directory.GetFiles()) получит эту коллекцию в должном виде. Но Directory.GetFiles() не обязан гарантировать что кто-то, получив эту коллекцию, не сможет сломать её.
S>Емнип, сами MS в своих Guidelines рекомендовали типа ReadOnlyCollection<T> в общих случаях.
что это меняет в случае Directory.GetFiles()? Кто-то, получив такой ответ от GetFiles(), сможет подменить его другим ответом и сломать себе ногу.
Эта рекомендация для других случаев. Это если кому-то придется возвращать не ответ сам в себе, актуальный на момент вызова, а часть своего состояния, когда сам объект, возвращающий свое состояние чувствителен к его изменению извне.
S>Кто серьезно относится к этому вопросу и что делаете?
Все вполне серьезно. Надо просто провести разделитель, когда надо свое состояние спасать от изменений, а когда возвращается Value, пусть даже изменяемое...