Предложить лучшие практики для создания класса Constants

25

Между членами моей команды ведутся дебаты по поводу объявления класса Constants. Мы перемещаем постоянные переменные в отдельный класс, как показано ниже.

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

Несколько членов моей команды предложили объявить класс запечатанным, чтобы избежать переопределения, а некоторые предлагают пометить его как статический, чтобы избежать создания экземпляра класса Constant.
Однако я предпочитаю использовать его как Sealed со статическим конструктором, так как это поможет нам инициализировать переменные только для чтения в будущем. Пожалуйста, дайте нам несколько советов по этому вопросу.

user46506
источник
Независимо от того, что вы идете, одним из соображений может быть использование интерфейса в системе, а не сам класс констант, чтобы избежать зависимостей между объектами и классом типа «Глобальный» ???
дреза
Итак, вы согласны сделать класс статическим и просто спросить, нужно ли вам добавлять статический конструктор сейчас или позже? Я не вижу противоположных мнений в вашем вопросе, пожалуйста, уточните.
Док Браун
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, иначе любой код, ссылающийся на константы, необходимо будет перестроить, если значения изменятся.

jcorcoran
источник
1
Одно из предостережений, которые вы можете найти с помощью константных переменных, четко объяснено здесь . Поскольку кодовые базы имеют тенденцию расти и усложняться, лучше избегать их использования const, увеличение производительности обычно не стоит рисков потенциальных проблем в будущем, ИМХО. Я предпочитаю использовать public static readonlyпеременные для констант.
Жоанлофе