Когда использовать свойства и методы? - PullRequest
12 голосов
/ 31 июля 2009

Я новичок в мире .NET, пришедший из C ++, и я пытаюсь лучше понять свойства. Я заметил, что в .NET Framework Microsoft использует свойства повсюду. Есть ли преимущество в использовании свойств вместо создания методов get / set? Существует ли общее руководство (а также соглашение об именах), когда следует использовать свойства?

Ответы [ 14 ]

0 голосов
/ 31 июля 2009

Подумайте об этом так: свойства инкапсулируют ваши поля (обычно помеченные как частные), и в то же время предоставляют вашим коллегам-разработчикам либо установить, либо получить значение поля. Вы можете даже выполнить обычную проверку в методе set свойства, если хотите.

0 голосов
/ 31 июля 2009

Также обратите внимание, что свойства доступны через отражение. Хотя методы тоже, свойства представляют «что-то интересное» в объекте. Если вы пытаетесь отобразить сетку свойств объекта - скажем, что-то вроде конструктора форм Visual Studio - тогда вы можете использовать отражение для запроса свойств класса, перебора каждого свойства и опроса объекта на предмет значение.

0 голосов
/ 31 июля 2009

Хотя это не жесткое и быстрое правило, и, как уже отмечали другие, свойства реализованы в виде пар «получить / установить» «за кулисами» - как правило, свойства инкапсулируют / защищают данные состояния поверхности, тогда как методы (или процедуры или функции) делать работу и дать результат этой работы.

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

Вообще говоря - если вам нужен способ контроля доступа к данным или состоянию, тогда Свойства позволяют реализации, которая обеспечивает доступ определенным, проверяемым и оптимизированным способом (позволяя ограничение доступа, диапазон и проверку ошибок, создание резервного хранилища на спрос и способ избежать избыточной настройки вызовов).

Напротив, методы преобразуют состояние и порождают новые значения внутри и снаружи без обязательно повторяемых результатов.

Конечно, если вы пишете процедурный или преобразующий код в свойстве, возможно, вы действительно пишете метод.

0 голосов
/ 31 июля 2009

Компилятор фактически генерирует методы get_MyProperty и set_MyProperty для каждого свойства, которое вы определяете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...