Запропонуйте кращу практику для створення класу Константи


25

Між членами моєї команди існує дискусія щодо декларації класу Константи. Ми переміщуємо постійні змінні в окремий клас, як нижче.

public class Constants
{
      public const string StateId = "ST";
      public const string CountryId = "CI";
}

Кілька моїх членів команди запропонували нам оголосити клас запечатаним, щоб уникнути переборного варіанту, а декілька пропонують нам позначити його як статичний, щоб уникнути створення екземпляра класу Constant.
Однак я вважаю за краще мати його запечатаним зі статичним конструктором, оскільки це допоможе нам ініціалізувати змінні, доступні лише для читання, у майбутній потребі. Будь ласка, дайте нам поради щодо цього.


Що б ви не пішли, одним із причин може бути використання інтерфейсу в системі, а не сам клас констант, щоб уникнути залежностей між об'єктами та класом типу "Глобальний" ???
dreza

Отже, ви погоджуєтесь робити клас статичним і просто запитуєте, чи слід додати статичний конструктор зараз чи пізніше? Я не бачу жодних протилежних думок у вашому запитанні.
Док Браун,


2
Я не розумію вашого запитання. Якщо клас не має членів екземпляра, ви можете позначити його static. Це абсолютно ортогонально щодо наявності або відсутності статичного конструктора.
CodesInChaos

1
Ваші постійні фактично постійні в математичному сенсі, чи це форма конфігурації?
CodesInChaos

Відповіді:


31

Не зовсім зрозуміло, у чому ваше запитання, але якщо значення справді постійні, я не бачу проблеми з простим варіантом:

    public static class LocationConstants
    {
        public const string StateId = "ST";
        public const string CountryId = "CI";
    }

Використання staticв декларації класу сигналізує про ваш намір для цілей цього класу.

У цій відповіді про переповнення стека Марк Гравелл описує деякі можливі проблеми з константами . Тільки ви дізнаєтесь, чи це проблема у вашій кодовій базі, але якщо значення коли-небудь можуть змінюватися, використовуйте public static readonlyзамість них const, інакше будь-який код, що посилається на константи, потрібно буде відновити, якщо значення змінюються.


1
Одним із застережень ви можете знайти з допомогою константної змінних явно пояснено тут . Оскільки кодові бази мають тенденцію до зростання та ускладнення, краще уникати використання const, підвищення ефективності, як правило, не варто ризикувати потенційними проблемами в майбутньому, IMHO. Я вважаю за краще використовувати public static readonlyзмінні для констант.
joanlofe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.