for WPF developers
Home Profile Tips 全記事一覧

Conditional 属性の使い方

(2016/12/03 0:27:05 created.)

前節の例を Conditional 属性で書き直したコードは次のようになります。

Program.cs
  1. namespace Tips_ConditionalAttribute
  2. {
  3.     using System;
  4.     using System.Diagnostics;
  5.  
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             var model = new Sample();
  11.  
  12.             model.DebugOutput();
  13.  
  14.             Console.ReadKey();
  15.         }
  16.     }
  17.  
  18.     public class Sample
  19.     {
  20.         [Conditional("DEBUG")]
  21.         public void DebugOutput()
  22.         {
  23.             Console.WriteLine("シンボル \"DEBUG\" が定義されているときのみ実行されます。");
  24.         }
  25.     }
  26. }

Conditional 属性はメソッドの宣言前に添付する形で記述します。引数にプリプロセスシンボルを指定することで、#if と同じ役割を果たします。しかし、このメソッドを呼び出す方には特に追加する記述はありません。このように、メソッドの属性として Conditional 属性を付加することで、コンパイラが自動的に認識し、コンパイル時に呼び出しそのものを省略してくれるようになります。#if~#endif を使用する方法と違い、メソッドの定義側にだけ書けばいいので、使う方も特に気にせずに使うことができます。

ただし、呼び出し自体を省略するようになる性質からか、Conditional 属性は戻り値が void であるメソッドにしか適用できません。void 以外の戻り値を持つメソッドに Conditional 属性を追加した場合、コンパイルエラーが発生します。