C#におけるConditionalによる条件の定義方法


参考:MSDN
 
Conditionalプロパティを使用すると、プログラマは条件メソッドを定義できます.Conditionalプロパティは、条件コンパイル記号をテストすることによって適用される条件を決定します.条件メソッド呼び出しが実行されると、呼び出しが実行されるかどうかは、呼び出しが発生したときにこの記号が定義されているかどうかに基づいて決定されます.このシンボルが定義されている場合、呼び出しが実行されます.そうでなければ、呼び出しは省略されます(呼び出しのパラメータの計算も含まれます).
条件メソッドには、次の制限があります.
  • 条件メソッドは、クラス宣言または構造宣言のメソッドである必要があります.インタフェース宣言のメソッドにConditionalプロパティを指定すると、コンパイル時にエラーが発生します.
  • 条件メソッドには、void戻りタイプが必要です.
  • は、override修飾子で条件メソッドをマークすることはできません.ただし、条件方法はvirtual修飾子で表記することができる.このような方法の書き換え方法は、条件付きの方法として暗黙的に含まれ、Conditional属性で明示的にマークすることはできない.
  • 条件メソッドは、インタフェースメソッドの実装ではない.コンパイル中にエラーが発生します.
  • 条件メソッドが「委任作成式」に使用されている場合、コンパイル時エラー
  • も発生します.
    Ps.ifとendifの代わりにConditional属性を使用する
    /*MyConditional.cs*/
    
    //#define DEBUG
    using System;
    using System.Diagnostics;
    class Info
    {
    	//[Conditional("DEBUG")]
    	public static void Trace(string strMessage)
    	{
    		Console.WriteLine(strMessage);
    	}
    
    	[Conditional("DEBUG")]
    	public static void TraceX(string strFormat,params object[] list)
    	{
    		Console.WriteLine(strFormat, list);
    	}
    }
    
    class TestConditional
    {
    	public static void Main()
    	{
    		Info.Trace("Cool!");
    		Info.TraceX("{0} {1} {2}","C", "U", 2001);
    	}
    }
    
    /*
     1:
    csc /define:DEBUG /out:1.exe MyConditional.cs
    
     1:
    Cool!
    C U 2001
    */
    
    /*
     2:
    csc /out:1.exe MyConditional.cs
    
     2:
    Cool!
    */