Должны ли статические свойства в классе Constants реализовывать вспомогательные поля? - PullRequest
0 голосов
/ 28 июля 2010

У меня есть класс Constants, в котором я храню несколько статических переменных только для чтения.

Должен ли я сделать это:

private static readonly int _maxThings = 100;
...
public static int MaxThings { get { return _maxThings; } }

Это кажется излишним для меня. Есть ли причина, по которой я бы не стал делать следующее?

public static int MaxThings { get { return 100; } }

Редактировать

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

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

Спасибо за ответы.

Ответы [ 3 ]

3 голосов
/ 28 июля 2010

вы должны сделать

public const int MaxThings = 100;

нет никаких причин, по которым я вижу использование свойств в этом случае.

Обновление ->

В ответ на комментарии. Если вы разрабатываете библиотеку и экспортируете константы, важно понимать, как константы потребляются в .net. При компиляции с вашей библиотекой значения констант будут встроены и включены в приложение-потребитель, так что если ваша библиотека обновлена ​​, а приложение-потребитель не , тогда старые значения констант будут по-прежнему присутствовать. Это, конечно, когда должны использоваться статические свойства.

Если вы не разрабатываете библиотеку, используйте const'ы.

1 голос
/ 28 июля 2010

Поскольку константы хорошо ... постоянны, значение никогда не изменится.

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

Поскольку у вас есть константа, которая никогда не изменится, нет никаких причин для ее реализации в качестве свойства. Хотя вы определили readonly static, поскольку его можно изменить только внутри класса, внешне между ним и константой нет никакой разницы.

0 голосов
/ 28 июля 2010

С точки зрения читабельности кода я считаю второй вариант улучшением.Не уверен, что компилятор достаточно умен, чтобы оптимизировать в этой ситуации, но попадание настолько незначительно, что я бы просто стал читать.

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