Должен ли я использовать свойства в моих программах на C # или использовать методы доступа get / set? - PullRequest
4 голосов
/ 13 апреля 2009

Я читал книгу под названием «Желтая книга C #» Роба Майлза, когда натолкнулся на это утверждение:

Программист любит новые блестящие игрушки. Они очень хотят использовать языковые возможности, чтобы хвастаться. Свойства могут быть немного похожи на это. При рассмотрении свойств по сравнению с методами get и set я скорее поклонник старомодных методов get и set, потому что вы знаете, где вы находитесь с ними. С другой стороны, я вижу, где свойства могут облегчить жизнь, если их правильно использовать.

Я не совсем уверен, что он имеет в виду. Что вы, ребята, предлагаете? Что предлагает MS?

Ответы [ 7 ]

18 голосов
/ 13 апреля 2009

Я думаю, вы должны рассмотреть несколько советов, не связанных с программированием

Когда будешь в Риме, делай так, как делают римляне.

.NET имеет свойства, встроенные во все его библиотеки, конструкторы и генераторы кода. Это почти неотъемлемая часть платформы. Если вы решите использовать методы доступа get / set вместо обычных свойств, вы создадите библиотеку, которая будет иметь внешний вид, отличный от того, что ожидает любой другой программист.

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

8 голосов
/ 23 июня 2009

Я написал эту часть книги, когда программист на Java перешел на C # несколько лет назад. Я думаю, что я вернусь к тексту в следующей версии и сделаю его немного более понятным.

Если вы хотите убедиться, что пользователь вашего класса знает, что какой-то код будет запускаться, когда он использует вещь, то включение его в метод делает это явным. Кроме того, использование методов позволяет возвращать условия ошибки без необходимости генерировать исключения. Хитов производительности нет, так как компилятор все равно преобразует свойства в методы.

Я часто использую свойства в коде, который я пишу, особенно для таких вещей, как state. Я никогда не выступал за то, чтобы не использовать свойства, а больше следил за тем, чтобы в правильной ситуации вы использовали правильные вещи.

5 голосов
/ 13 апреля 2009

Я не знаю, кто такой Роб Майлз, но если ваша цитата верна, я уже потерял к нему уважение.

Все в .NET использует свойства. Если ваш код не использует свойства, то это будет единственный фрагмент кода, который не использует.

2 голосов
/ 13 апреля 2009
myObject.Property++;

против

myObject.SetProperty(myObject.GetProperty() + 1);

Да ..

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

0 голосов
/ 13 апреля 2009

Если вы не используете свойства, вы теряете очень заметную функцию, которую я считаю чрезвычайно полезной в .NET: Binding. Вы можете привязывать только / к свойствам в .NET, поэтому, если вы используете методы доступа get / set, вы не будете хорошо играть с другими.

0 голосов
/ 13 апреля 2009

Лучший способ думать об этом - проводить сравнения с реальными объектами. Позвольте нам сказать, что вы человек в реальной жизни должен быть разработан. Как бы вы назвали некоторые из ваших атрибутов с точки зрения цвета волос, роста и ширины и т. Д.? Как только вы начнете размышлять об этом, это будет более полезным, так как у каждого свой способ мышления.

0 голосов
/ 13 апреля 2009

Я люблю свойства. В «Руководстве по проектированию библиотек классов» они рекомендуют использовать свойства (особенно для состояния, которое не зависит от другого состояния).

...