2010-07-28 2 views
0

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

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

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

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

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

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

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

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

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

+1

Есть ли причина, по которой не нужно делать? public const int MaxThings = 100; – Anero

+1

@Anero, В зависимости от того, кто вызывает код, очень хорошая причина может заключаться в том, что MaxThings не является постоянной.В отличие от PI или Zero, которые действительно постоянны, MaxThings может стать 200 в один день. Поскольку постоянные символы заменяются во время компиляции, другая сборка может не «видеть» изменение до тех пор, пока оно не будет перекомпилировано. – Josh

ответ

3

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

public const int MaxThings = 100;

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

Update ->

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

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

+2

См. Http://stackoverflow.com/questions/755685/c-static-readonly-vs-const - особенно ответ @Marc Gravell. Если «константа» может измениться и используется другими сборками, вы можете рассмотреть статические свойства. – TrueWill

+1

Согласитесь с TrueWill. Если бы это была частная или внутренняя доступность, я бы сказал, бегите с ней. Но публичные константы являются подозрительными, если они не являются по-настоящему постоянными значениями, такими как гравитационные константы или символы WM_BLAH. – Josh

0

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

1

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

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

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

Смежные вопросы