Директива undef в C#
После #undef имя ведёт себя так, будто #define не было. Это удобно в длинных файлах с локальными флагами.
Сначала объявим символ, затем отменим и проверим ветку else: "off" - ветка после #undef FLAG. Директива #undef действует только на символы, объявленные в этом же исходнике:
#define FLAG
#undef FLAG
#if FLAG
Console.WriteLine("on");
#else
Console.WriteLine("off");
#endif
Объявите символ DEMO, сразу снимите его и выведите "closed".