Aşağıdakini yapmak istiyorum ama C ++ yerine C # ile
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
Aşağıdakini yapmak istiyorum ama C ++ yerine C # ile
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
Yanıtlar:
Koşullu Özniteliği kullanmanızı tavsiye ederim !
Güncelleme: 3.5 yıl sonra
Bunun gibi kullanabilirsiniz #if( örnek MSDN'den kopyalanmıştır ):
// 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
}
}
Yalnızca yöntem parçalarını hariç tutmak için kullanışlıdır.
#ifBazı yöntemi derlemeden hariç tutmak için kullanırsanız , bu yöntemi de çağıran tüm kod parçalarını derlemeden hariç tutmanız gerekir (bazen çalışma zamanında bazı sınıfları yükleyebilir ve arayanı "Tüm başvuruları bul" ile bulamazsınız). Aksi takdirde hatalar olacaktır.
Öte yandan, koşullu derlemeyi kullanırsanız, yöntemi çağıran tüm kod parçalarını yine de bırakabilirsiniz. Tüm parametreler yine de derleyici tarafından doğrulanacaktır. Yöntem, çalışma zamanında çağrılmayacaktır . Metodu bir kez gizlemenin ve onu çağıran tüm kodu kaldırmanın daha iyi olduğunu düşünüyorum. Koşullu özniteliği değer döndüren yöntemlerde kullanmanıza izin verilmez - yalnızca void yöntemlerinde. Ama bunun büyük bir sınırlama olduğunu sanmıyorum çünkü kullanırsanız#if bir değer döndüren bir yöntemle , onu çağıran tüm kod parçalarını da gizlemeniz gerekir.
İşte bir örnek:
// Class1.ConditionalMethod () çağrısı çalışma zamanında yok sayılacak
// DEBUG sabiti tanımlanmadıkça
System.Diagnostics kullanarak;
sınıf Sınıf1
{
[Koşullu ( "DEBUG")]
public static void ConditionalMethod () {
Console.WriteLine ("Yürütülen Class1.ConditionalMethod");
}
}
Özet:
#ifdefC ++ ' da kullanırdım ama C # / VB ile Koşullu özniteliği kullanırdım. Bu şekilde, onu çağıran kod parçalarını gizlemek zorunda kalmadan yöntem tanımını gizlersiniz. Çağıran kod hala derleyici tarafından derlenir ve doğrulanır, ancak yöntem çalışma zamanında çağrılmaz. #ifBağımlılıkları önlemek için kullanmak isteyebilirsiniz, çünkü Koşullu öznitelik ile kodunuz hala derlenmiştir.
C # bir önişlemciye sahiptir. C ++ ve C'den biraz farklı çalışır.
İşte bir MSDN bağlantıları - tüm önişlemci direktifleriyle ilgili bölüm .