У меня есть различные константы, которые моя программа использует ... string
's, int
' s, double
's, и т.д ... Как лучше всего их хранить? Я не думаю, что мне нужен Enum
, потому что все данные не одного типа, и я хочу вручную установить каждое значение. Должен ли я просто хранить их все в пустом классе? Или есть способ лучше?
97
Ответы:
Вы, вероятно, могли бы иметь их в статическом классе со статическими свойствами только для чтения.
источник
IMO, использующий класс, полный констант, подходит для констант. Если они будут время от времени меняться, я рекомендую вместо этого использовать AppSettings в вашей конфигурации и класс ConfigurationManager.
Когда у меня есть «константы», которые фактически извлекаются из AppSettings или подобного, у меня всегда будет класс «констант», который завершает чтение из диспетчера конфигурации. Всегда более значимо иметь
Constants.SomeModule.Setting
вместо того, чтобы обращаться напрямую вConfigurationManager.AppSettings["SomeModule/Setting"]
любое место, которое хочет использовать указанное значение настройки.Бонусные баллы за эту настройку, поскольку
SomeModule
, скорее всего, это будет вложенный класс внутри файла констант, вы можете легко использовать инъекцию зависимостей для инъекцииSomeModule
напрямую в классы, которые от нее зависят. Вы также можете даже извлечь интерфейс поверх,SomeModule
а затем создать зависимость от негоISomeModuleConfiguration
в вашем потребляющем коде, тогда это позволит вам отделить зависимость от файлов констант и даже потенциально упростить тестирование, особенно если эти настройки поступают из AppSettings и вы меняете их с помощью преобразований конфигурации, потому что настройки зависят от среды.источник
Мне нравится делать следующее (но обязательно прочитайте до конца, чтобы использовать правильный тип констант ):
Прочтите это, чтобы узнать, почему это
const
может быть не то, что вам нужно. Возможные типы констант :const
поля. Не используйте для разных сборок (public
илиprotected
), если значение может измениться в будущем, потому что значение будет жестко закодировано во время компиляции в этих других сборках. Если вы измените значение, старое значение будет использоваться другими сборками, пока они не будут повторно скомпилированы.static readonly
поляstatic
собственность безset
источник
Это лучший способ ИМО. Нет необходимости в свойствах или только для чтения:
источник
Подходит пустой статический класс. Рассмотрите возможность использования нескольких классов, чтобы получить хорошие группы связанных констант, а не один гигантский файл Globals.cs.
Кроме того, для некоторых констант типа int учтите следующие обозначения:
Так как это позволяет обрабатывать значения как флаги .
источник
Еще один голос за использование web.config или app.config. Конфигурационные файлы - хорошее место для констант, таких как строки подключения и т. Д. Я предпочитаю не смотреть на исходный код, чтобы просматривать или изменять такие вещи. Статический класс, который считывает эти константы из файла .config, может быть хорошим компромиссом, так как он позволит вашему приложению получать доступ к этим ресурсам, как если бы они были определены в коде, но все же дает вам гибкость, позволяя их легко просматривать / редактировать. пространство.
источник
Да, вполне
static class
подойдет a для хранения констант, за исключением констант, относящихся к определенным типам.источник
Если эти константы являются ссылками на службы или переключателями, которые влияют на поведение приложения, я бы установил их как пользовательские настройки приложения. Таким образом, если их нужно изменить, вам не нужно перекомпилировать, и вы все равно можете ссылаться на них через класс статических свойств.
источник
Я бы предложил статический класс со статическим только для чтения. Найдите фрагмент кода ниже:
источник