Saya ingin melakukan hal di bawah ini tetapi dalam C #, bukan 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
Saya ingin melakukan hal di bawah ini tetapi dalam C #, bukan 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
Jawaban:
Saya akan merekomendasikan Anda menggunakan Atribut Kondisional !
Pembaruan: 3,5 tahun kemudian
Anda dapat menggunakan #ifseperti ini ( contoh disalin dari 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
}
}
Hanya berguna untuk mengecualikan bagian dari metode.
Jika Anda menggunakan #ifuntuk mengecualikan beberapa metode dari kompilasi, maka Anda harus mengecualikan semua bagian kode yang memanggil metode itu juga dari kompilasi (terkadang Anda dapat memuat beberapa kelas pada waktu proses dan Anda tidak dapat menemukan pemanggil dengan "Temukan semua referensi"). Jika tidak maka akan terjadi kesalahan.
Sebaliknya, jika Anda menggunakan kompilasi bersyarat, Anda masih dapat meninggalkan semua bagian kode yang memanggil metode tersebut. Semua parameter masih akan divalidasi oleh kompilator. Metode ini tidak akan dipanggil saat runtime . Saya pikir lebih baik menyembunyikan metode ini hanya sekali dan tidak harus menghapus semua kode yang memanggilnya juga. Anda tidak diperbolehkan menggunakan atribut kondisional pada metode yang mengembalikan nilai - hanya pada metode kosong. Tetapi menurut saya ini bukan batasan besar karena jika Anda menggunakan #ifmetode yang mengembalikan nilai, Anda harus menyembunyikan semua bagian kode yang memanggilnya juga.
Berikut ini contohnya:
// memanggil Class1.ConditionalMethod () akan diabaikan saat runtime
// kecuali jika konstanta DEBUG ditentukan
menggunakan System.Diagnostics;
kelas Kelas 1
{
[Bersyarat ("DEBUG")]
public static void ConditionalMethod () {
Console.WriteLine ("Executed Class1.ConditionalMethod");
}
}
Ringkasan:
Saya akan menggunakan #ifdefC ++ tetapi dengan C # / VB saya akan menggunakan atribut Conditional. Dengan cara ini Anda menyembunyikan definisi metode tanpa harus menyembunyikan potongan kode yang memanggilnya. Kode panggilan masih dikompilasi dan divalidasi oleh kompilator, meskipun metode ini tidak dipanggil pada waktu proses. Anda mungkin ingin menggunakan #ifuntuk menghindari ketergantungan karena dengan atribut Conditional kode Anda masih dikompilasi.
C # memang memiliki preprocessor. Ini bekerja sedikit berbeda dari C ++ dan C.
Ini adalah tautan MSDN - bagian tentang semua arahan preprocessor .