Почему никто не принимает открытые поля в C #?

Побитовое XOR, Java не имеет оператора экспоненции, вам придется использовать Math.pow() вместо этого.

29
задан user 31 May 2012 в 05:50
поделиться

8 ответов

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

40
ответ дан Cody Brocious 31 May 2012 в 05:50
поделиться

Потому что позднее изменение открытых полей, чтобы получить методы доступа get / set, нарушит код См. этот ответ для получения дополнительной информации

.
9
ответ дан Community 31 May 2012 в 05:50
поделиться

Это действительно о будущем коде. Когда вы говорите (выделение мое):

Что если я точно знаю , что я не буду переопределять поле или добавлять к нему (побочные эффекты плохие, верно? ) - разве не должно быть достаточно простого поля?

Это абсолютное утверждение, и, как мы знаем (как и большинство статических анализаторов), в жизни есть только два абсолюта.

Он просто пытается защитить тебя от этого. Если это проблема, вы должны указать анализатору игнорировать ее (через атрибуты, которые зависят от используемого вами инструмента анализа).

27
ответ дан casperOne 31 May 2012 в 05:50
поделиться

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

0
ответ дан Peter T. LaComb Jr. 31 May 2012 в 05:50
поделиться

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

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

4
ответ дан Jim Mischel 31 May 2012 в 05:50
поделиться

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

1
ответ дан BFree 31 May 2012 в 05:50
поделиться

Учитывая тот факт, что текущий C # 3.0 допускает автоматические свойства, синтаксис которых подобен:

public int Property {get; set;}

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

В любом случае, анализатор жалуется на вещи, которые в большом проценте (в данном случае, например, в 99,99% случаев) являются плохой практикой программирования ... но в любом случае это просто жалобы. Поля могут быть обнародованы, и есть некоторые крайние случаи, когда их прямое использование может быть оправдано. Как всегда, используйте ваш здравый смысл ... но имейте в виду элементарное правило для лучших практик программирования ... Есть ли действительно веская причина нарушить соглашение? Если есть тогда продолжайте, если нет или если ответ «это включает в себя больше работы», то придерживайтесь практики ...

21
ответ дан Jorge Córdoba 31 May 2012 в 05:50
поделиться

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

1
ответ дан Stu Mackellar 31 May 2012 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: