Я бы порекомендовал вам использовать Условный атрибут !
Обновление: через 3,5 года
Вы можете использовать #if
следующим образом ( пример, скопированный с MSDN ):
// preprocessor_if.cs
#define DEBUG
#define VC_V7
using System;
public class MyClass
{
static void Main()
{
#if (DEBUG && !VC_V7)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
Console.WriteLine("DEBUG and VC_V7 are defined");
#else
Console.WriteLine("DEBUG and VC_V7 are not defined");
#endif
}
}
Полезно только для исключения частей методов.
Если вы используете #if
для исключения какого-либо метода из компиляции, вам придется исключить из компиляции все фрагменты кода, которые также вызывают этот метод (иногда вы можете загрузить некоторые классы во время выполнения и вы не можете найти вызывающего с Найти все ссылки "). В противном случае будут ошибки.
Если вы используете условную компиляцию с другой стороны, вы все равно можете оставить все фрагменты кода, которые вызывают метод. Все параметры будут по-прежнему проверяться компилятором. Метод просто не будет вызываться во время выполнения . Я думаю, что лучше спрятать метод только один раз и не удалять весь код, который его вызывает. Вы не можете использовать условный атрибут в методах, которые возвращают значение - только в методах void. Но я не думаю, что это большое ограничение, потому что если вы используете #if
с методом, который возвращает значение, вы должны скрыть все фрагменты кода, которые его тоже вызывают.
Вот пример:
// calling Class1.ConditionalMethod() will be ignored at runtime
// unless the DEBUG constant is defined
using System.Diagnostics;
class Class1
{
[Conditional("DEBUG")]
public static void ConditionalMethod() {
Console.WriteLine("Executed Class1.ConditionalMethod");
}
}
Резюме:
Я бы использовал #ifdef
в C ++, но с C # / VB я бы использовал атрибут Conditional. Таким образом, вы скрываете определение метода без необходимости скрывать фрагменты кода, которые его вызывают. Вызывающий код все еще компилируется и проверяется компилятором, хотя метод не вызывается во время выполнения.
Возможно, вы захотите использовать #if
, чтобы избежать зависимостей, потому что с условным атрибутом ваш код все еще компилируется.