У меня есть C++ код, который использует такой подход:Проблемы, связанные с использованием #ifdefs в C#
#if defined(CONSTANT)
..
// Some code
#else
// Some other code
мне сказали, что я могу использовать аналогичный подход в C# -из мне нужно переписать этот C++ проект на C#. Но есть одна проблема. Из документации, которую я видел, что в C#, если я использую
#define CONSTANT
это видно только в файле, где он был объявлен.
Но я не хочу этого. Я хочу, чтобы этот CONSTANT
был виден во всех классах? Я думаю, что одним из решений является объявление таких констант в настройках проекта и т. Д., Но вот мой первый вопрос: В этом случае мне нужно отправить дополнительный файл с моей DLL? Или эти константы будут встроены в DLL?
И, наконец, чтобы избежать описанных выше проблем, я думаю о подходе к использованию только открытых значений const в C#. Как
if(Globals.SomeConstant == SOMEVALUE)
// Do this
else
// Do smth else
А затем в зависимости от конфигурации обращу значение по умолчанию при объявлении Globals.SomeConstant
до значения мне нужно, скомпилировать DLL и отправить его. Звучит ли это нормально и будет ли это работать так? Будут ли назначаться значения по умолчанию и правильно читать внутри DLL-методов? (они будут работать как # ifdefs
?)
Я знаю, что мне нужно будет перекомпилировать, чтобы изменить код, но это нормально.
Вы можете определить глобальные определяет в свойствах проекта для данного проекта. Свойства> Сборка> Условные символы компиляции Определенные символы там не будут внедрены, скомпилированный код будет следовать другому пути в компиляторе, символы компиляции - это «время компиляции», а не время выполнения. Второй метод, который вы опубликовали, не эквивалентен '# ifdef', и я бы избегал такого подхода. –
Они просто константы времени компиляции, ничто не будет встроено в вашу DLL. –
@RonBeyer: Моя точка зрения заключается в том, что я определяю эти константы в свойствах проекта, как вы упомянули, мне нужно отправить что-либо дополнительно с моей DLL? Или просто моя DLL будет в порядке? и в зависимости от того, какие символы я определил в свойствах, я могу соответственно использовать #ifdefs? –