Добрый день. Простите за тупой вопрос. Есть константы слудующего вида
1. Используются только в одном классе но в нескольких местах
2. Используются в нескольких классах одной иерархии
3. Используются в нескольких не связанных классах
Здравствуйте, Аноним, Вы писали:
А>Добрый день. Простите за тупой вопрос. Есть константы слудующего вида А>1. Используются только в одном классе но в нескольких местах
Здравствуйте, Doc, Вы писали:
А>>3. Используются в нескольких не связанных классах
Doc>Задать const в одном классе (к которому по смыслу ближе это значение), а потом передать как параметр конструктора в другие классы.
А потом долго и нудно дебажить на предмет откуда это значение появилось?
public const и прямое обращение — наше все.
Константы компилятор C# подставляет в код (инлайнит). В случае когда клиентский код скомпилирован с одной версией библиотеки, а выполняется с другой (например через технику bindingRedirect-а), в которой значение константы изменено, то он по прежнему будет использовать старое значение. Поэтому рекомендуется делать видимость констант не шире internal, а в случае когда к константе нужно получать доступ извне сборки — делать static readonly поле.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Где правильно хранить константы?
От:
Аноним
Дата:
17.01.12 11:56
Оценка:
Здравствуйте, hardcase, Вы писали:
А>>Чем лучше?
H>Константы компилятор C# подставляет в код (инлайнит). В случае когда клиентский код скомпилирован с одной версией библиотеки, а выполняется с другой (например через технику bindingRedirect-а), в которой значение константы изменено, то он по прежнему будет использовать старое значение.
Кэп?
H>Поэтому рекомендуется делать видимость констант не шире internal, а в случае когда к константе нужно получать доступ извне сборки — делать static readonly поле.
Это зависит от требований. Никаких общих рекомендаций тут давать нельзя.
А>>Чем лучше?
H>Константы компилятор C# подставляет в код (инлайнит). В случае когда клиентский код скомпилирован с одной версией библиотеки, а выполняется с другой (например через технику bindingRedirect-а), в которой значение константы изменено, то он по прежнему будет использовать старое значение. Поэтому рекомендуется делать видимость констант не шире internal, а в случае когда к константе нужно получать доступ извне сборки — делать static readonly поле.
Лучше не доводить до такого, либо использовать свойства, а не поля.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, hardcase, Вы писали:
А>>>Чем лучше?
H>>Константы компилятор C# подставляет в код (инлайнит). В случае когда клиентский код скомпилирован с одной версией библиотеки, а выполняется с другой (например через технику bindingRedirect-а), в которой значение константы изменено, то он по прежнему будет использовать старое значение.
А>Кэп?
H>>Поэтому рекомендуется делать видимость констант не шире internal, а в случае когда к константе нужно получать доступ извне сборки — делать static readonly поле.
А>Это зависит от требований. Никаких общих рекомендаций тут давать нельзя.
Можно, например для использования в других сборках — пользуем свойства.
Здравствуйте, vvlad.net, Вы писали:
VN>Лучше не доводить до такого, либо использовать свойства, а не поля.
А нафига для примитивных значений использовать свойства?
Мало того что нужно лишних буков возле объявления понаписать, так еще и руками конструктор статический нарисовать.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, vvlad.net, Вы писали:
VN>>Лучше не доводить до такого, либо использовать свойства, а не поля.
H>А нафига для примитивных значений использовать свойства? H>Мало того что нужно лишних буков возле объявления понаписать, так еще и руками конструктор статический нарисовать.
А нафига константы менять? Ну а если константы меняются, то может случиться что значение надо будет получать динамически, что ты тогда будешь делать? Правильно, поставишь свойство. Ну и заодно перекомпиляешь зависимые сборки
Здравствуйте, Аноним, Вы писали:
А>Истерика? Скажи, например, зачем String.Empty объявлять не-константой? Что такое должно произойти, чтобы это значение изменилось?
Бывает так что константы не пустые строки (имена какие-нибудь) — в этом случае вероятность их изменения ой как далека от нуля.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: Где правильно хранить константы?
От:
Аноним
Дата:
17.01.12 12:16
Оценка:
Здравствуйте, hardcase, Вы писали:
А>>Истерика? Скажи, например, зачем String.Empty объявлять не-константой? Что такое должно произойти, чтобы это значение изменилось?
H>Бывает так что константы не пустые строки (имена какие-нибудь) — в этом случае вероятность их изменения ой как далека от нуля.
Молодец, возьми с полки пирожок. Но сначала перечитай, что тебя так рассмешило:
Здравствуйте, Аноним, Вы писали:
А>А потом долго и нудно дебажить на предмет откуда это значение появилось? А>public const и прямое обращение — наше все.
Если нудно — то это проблемы архитектуры и именования параметров. Любое значение в приложении должно нести смысл и принадлежать конкретной сущности, а не классу — сборнику констант. Ну и в описанном мной варианте избегаем проблемы появления потенциального God-object, да еще и static по сути.
Здравствуйте, Doc, Вы писали:
Doc>Здравствуйте, Аноним, Вы писали:
А>>А потом долго и нудно дебажить на предмет откуда это значение появилось? А>>public const и прямое обращение — наше все.
Doc>Если нудно — то это проблемы архитектуры и именования параметров. Любое значение в приложении должно нести смысл и принадлежать конкретной сущности, а не классу — сборнику констант. Ну и в описанном мной варианте избегаем проблемы появления потенциального God-object, да еще и static по сути.
Что такое StringSplitOptions? То что это enum — значения не имеет, но почему он обьявлен отдельно от класса String?