Я хотел бы сделать следующее, но на C # вместо C ++
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
Я хотел бы сделать следующее, но на C # вместо C ++
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
Ответы:
Я бы порекомендовал вам использовать условный атрибут !
Обновление: 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метод, который возвращает значение, вам также нужно скрыть все фрагменты кода, которые его вызывают.
Вот пример:
// вызов Class1.ConditionalMethod () будет проигнорирован во время выполнения
// если не определена константа DEBUG
с помощью System.Diagnostics;
класс Class1
{
[Условное ( "DEBUG")]
public static void ConditionalMethod () {
Console.WriteLine («Выполненный класс1.ConditionalMethod»);
}
}
Резюме:
Я бы использовал #ifdefC ++, но с C # / VB я бы использовал атрибут Conditional. Таким образом вы скрываете определение метода, не скрывая фрагменты кода, которые его вызывают. Вызывающий код по-прежнему компилируется и проверяется компилятором, однако метод не вызывается во время выполнения. Вы можете использовать, #ifчтобы избежать зависимостей, потому что с атрибутом Conditional ваш код все еще компилируется.
В C # есть препроцессор. Он работает немного иначе, чем C ++ и C.
Вот ссылки MSDN - раздел обо всех директивах препроцессора .