Conditional (C# 程式設計手冊)
更新:2007 年 11 月
根據前置處理識別項執行方法。Conditional 屬性 (Attribute) 是 ConditionalAttribute 的別名 (Alias),可以套用至方法或屬性類別。
在此範例中,Conditional 是套用至方法,以啟用或停用程式特定診斷資訊的顯示。
#define TRACE_ON
using System;
using System.Diagnostics;
public class Trace
{
[Conditional("TRACE_ON")]
public static void Msg(string msg)
{
Console.WriteLine(msg);
}
}
public class ProgramClass
{
static void Main()
{
Trace.Msg("Now in Main...");
Console.WriteLine("Done.");
}
}
如果未定義 TRACE_ON 識別項,就不會顯示任何追蹤輸出。
Conditional 屬性通常與 DEBUG 識別項搭配使用,以便為偵錯組建啟用追蹤和記錄功能,而不是在發行的組建中使用,如下所示:
[Conditional("DEBUG")]
static void DebugMethod()
{
}
備註
呼叫標記為條件的方法時,指定的前置處理符號是否存在,將會決定是要包含或省略呼叫。如果有定義符號,則會包括呼叫,否則,將省略呼叫。相對於在 #if 和 #endif 內部封入方法,使用 Conditional 更為整潔雅緻,並且也是出錯可能較低的替代方法。
#if DEBUG
void ConditionalMethod()
{
}
#endif
條件式方法必須是類別或結構 (Struct) 宣告中的方法,並且必須具有 void 的傳回型別。
使用多個識別項
如果方法擁有多個 Conditional 屬性,至少定義了其中一個條件符號,則會包括這個方法的呼叫 (換句話說,在邏輯上,符號全都是以 OR 的計算方式而在一起)。在此範例中,A 或 B 的存在將會產生方法呼叫:
[Conditional("A"), Conditional("B")]
static void DoIfAorB()
{
// ...
}
若要達成邏輯 AND 符號的效果,您可以定義一系列的條件式方法。例如,以下的第二個方法只會在 A 和 B 兩者都有定義時才會執行:
[Conditional("A")]
static void DoIfA()
{
DoIfAandB();
}
[Conditional("B")]
static void DoIfAandB()
{
// Code to execute when both A and B are defined...
}
為屬性類別使用條件
Conditional 屬性也可以套用至屬性類別定義。在此範例中,只有在 DEBUG 有定義時,自訂屬性 Documentation 才會將資訊加入中繼資料。
[Conditional("DEBUG")]
public class Documentation : System.Attribute
{
string text;
public Documentation(string text)
{
this.text = text;
}
}
class SampleClass
{
// This attribute will only be included if DEBUG is defined.
[Documentation("This method displays an integer.")]
static void DoWork(int i)
{
System.Console.WriteLine(i.ToString());
}
}