Me gustaría hacer lo siguiente pero en C # en lugar de 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
Me gustaría hacer lo siguiente pero en C # en lugar de 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
Respuestas:
¡Te recomendaría que uses el atributo condicional !
Actualización: 3,5 años después
Puede usarlo #ifasí ( ejemplo copiado de 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
}
}
Solo es útil para excluir partes de métodos.
Si utiliza #ifpara excluir algún método de la compilación, tendrá que excluir de la compilación todas las piezas de código que también llaman a ese método (a veces puede cargar algunas clases en tiempo de ejecución y no puede encontrar la persona que llama con "Buscar todas las referencias"). De lo contrario, habrá errores.
Si usa la compilación condicional, por otro lado, aún puede dejar todos los fragmentos de código que llaman al método. Todos los parámetros aún serán validados por el compilador. El método simplemente no se llamará en tiempo de ejecución . Creo que es mucho mejor ocultar el método solo una vez y no tener que eliminar todo el código que lo llama también. No se le permite usar el atributo condicional en métodos que devuelven valor, solo en métodos nulos. Pero no creo que esto sea una gran limitación porque si usa #ifcon un método que devuelve un valor, debe ocultar todos los fragmentos de código que lo llaman también.
Aquí hay un ejemplo:
// llamar a Class1.ConditionalMethod () será ignorado en tiempo de ejecución
// a menos que se defina la constante DEBUG
utilizando System.Diagnostics;
clase Class1
{
[Condicional ("DEBUG")]
public static void ConditionalMethod () {
Console.WriteLine ("Class1.ConditionalMethod ejecutado");
}
}
Resumen:
Usaría #ifdefen C ++ pero con C # / VB usaría el atributo condicional. De esta forma, oculta la definición del método sin tener que ocultar los fragmentos de código que lo llaman. El compilador aún compila y valida el código de llamada, aunque el método no se llama en tiempo de ejecución. Es posible que desee utilizar #ifpara evitar dependencias porque con el atributo Condicional su código todavía está compilado.
C # tiene un preprocesador. Funciona de forma ligeramente diferente a la de C ++ y C.
Aquí hay enlaces de MSDN: la sección sobre todas las directivas del preprocesador .