Можно ли возвращать массив или список как свойство в .NET?

Я читал некоторую документацию по MSDN, касающуюся того, что нужно делать, а что нет, относительно того, следует ли что-то реализовывать как свойство или как метод. В частности, я столкнулся с одним правилом, по поводу которого у меня возник вопрос.

Если «Операция возвращает массив», используйте метод (вместо свойства).

Страница находится здесь: Выбор между свойствами и Методы

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

Я понимаю, что метод get свойства вернет ссылку на массив, что позволит изменить массив, даже если он не задан. В приведенном ими примере они делают глубокую копию массива каждый раз, когда к свойству обращаются, я думаю, чтобы избежать возможности этого, а это, в свою очередь, очень неэффективно.

Было бы неплохо, если бы свойство просто возвращало ссылку, а не выполняло все копирование, верно? А также использование метода вместо свойства не будет автоматически защищать список от изменения. Это почти тот же сценарий, вам все равно понадобится глубокая копия.

Всегда ли использование свойства и просто возврат ссылки на массив - плохая практика? Что, если вы хотите, чтобы вызывающая сторона могла изменять массив, или вам все равно, изменят ли они его? Это все еще плохо и почему, и если да, то каков был бы правильный способ разрешить вызывающему абоненту изменять?

23
задан James Skemp 24 July 2015 в 17:08
поделиться