ConditionalAttributeは、指定のシンボルマクロが定義されている時にそのメソッドを呼び出す属性。
ConditionalAttribute Class (System.Diagnostics) | Microsoft Docs
条件付きの呼び出し (ConditionalAttribute) - Programming/.NET Framework - 総武ソフトウェア推進所
これ自体は属性のトピックでも扱ったが、今回はConditionalAttributeが複数指定もできるという点について扱う。
空のプロジェクト
MainClass.csを追加。
まずは、
// 名前空間の登録 using System; // 共通データ型と基本クラス(System名前空間) using System.Diagnostics; // システムプロセスやイベントログとの対話するためのクラス.(System.Diagnostics名前空間) // メインクラス class MainClass // MainClassクラスの定義 { // メインメソッド static void Main() // Mainメソッドの定義 { // 属性付きメソッドTestを呼ぶ. Test(); // Testを呼ぶ. // "ABCDE"と出力. Console.WriteLine("ABCDE"); // Console.WriteLineで"ABCDE"と出力. } // 属性付きメソッドTest [Conditional("TEST"), Conditional("TEST2")] // "TEST"または"TEST2"が定義されていれば呼ばれる. static void Test() { // "Test"と出力. Console.WriteLine("Test"); // Console.WriteLineで"Test"と出力. } }
これだと、
ABCDE 続行するには何かキーを押してください . . .
Test()は呼ばれず、"Test"も出力されない。
次に、
// シンボルの定義 #define TEST // 名前空間の登録 using System; // 共通データ型と基本クラス(System名前空間) using System.Diagnostics; // システムプロセスやイベントログとの対話するためのクラス.(System.Diagnostics名前空間) // メインクラス class MainClass // MainClassクラスの定義 { // メインメソッド static void Main() // Mainメソッドの定義 { // 属性付きメソッドTestを呼ぶ. Test(); // Testを呼ぶ. // "ABCDE"と出力. Console.WriteLine("ABCDE"); // Console.WriteLineで"ABCDE"と出力. } // 属性付きメソッドTest [Conditional("TEST"), Conditional("TEST2")] // "TEST"または"TEST2"が定義されていれば呼ばれる. static void Test() { // "Test"と出力. Console.WriteLine("Test"); // Console.WriteLineで"Test"と出力. } }
と#defineで"TEST"を定義すると、
Test ABCDE 続行するには何かキーを押してください . . .
と"Test"が出力される。
そして、
と#defineで"TEST2"を定義すると、
Test ABCDE 続行するには何かキーを押してください . . .
と"Test"が出力される。