Однако теперь, когда C # дал миру свойства, кажется глупым использовать вместо этого методы получения и установки.
Прежде чем думать о том, какими дорогими должны быть свойства, я хотел бысоветуем вам подумать о том, лучше ли представляемую вами модель представлять как «свойство чего-либо». В языке существуют свойства для выражения принадлежности других сущностей - если SomeValue
не является логически свойством типапринадлежит, тогда вы должны рассмотреть возможность использования методов получения / установки.
Должны ли свойства в C # выполнять большую работу?
Сказав это, этопомогает сделать свойства недорогими, когда это возможно. Большинство разработчиков ожидают, что свойства будут эффективными оболочками вокруг некоторого внутреннего состояния того типа, к которому они принадлежат.Нарушение этого ожидания мешает разработчикам писать хорошо работающий код, который использует это свойство.Например, если свойство используется в качестве условия цикла for
, оно будет оцениваться на каждой итерации - если это дорого ... ну, это может быть плохо.
Свойства также часто доступны в отладчике - вы не хотите, чтобы свойства выполняли дорогостоящую логику, поскольку это может препятствовать отладке.Получатели свойств, которые выполняют операции с побочными эффектами (например, запрос к базе данных), также обычно являются плохой практикой, поскольку они могут вводить heisenbugs при проверке поведения приложения в отладчике.
Какая альтернатива.
Вы также можете прочитать этот ответ , в котором приведены некоторые общие рекомендации по проектированию недвижимости.Я бы также посоветовал вам прочитать Выбор между свойствами и методами в руководстве по проектированию .NET для MSDN.
Иногда имеет смысл создать свойство, доступное только для чтения (без установщика)но там, где существует один или несколько отдельных методов, которые устанавливают внутреннее состояние, связанное с этим свойством.Использование этой идиомы зависит от того, будут ли операции над вашим объектом семантически представлены как «изменение состояния» или «выполнение действия» .Когда это происходит позже, я склонен использовать методы (а не установщики свойств) для выражения этого поведения.