C# 属性

属性:クラス,メンバに追加情報を与えるもの.

 C++などの既存の言語では,追加情報を定義する場合,言語仕様自体を拡張し,新たにコンパイラを作り直す必要があった.C#では自分で属性を定義し,クラスやメンバに付加することができる.すなわち,ライブラリて提供されている属性や自作した属性を用いることで,コンパイラに対する指示を行ったり,クラスの利用者に対する情報を残すことができる.

属性の一例としては,,,

  • 条件コンパイルなどの,コンパイラへの指示に使う.
  • 作者情報などをメタデータとしてプログラムに埋め込む.
  • リフレクションを使用して,プログラム実行時に属性情報を取り出す.

属性の使い方
属性は以下のようにして,クラスやメンバの前につけて使う.

[属性名(属性パラメータ)]
メンバーの定義

下記のように使うと,DEBUG_PRINTというシンボルが定義されている時のみメソッドが実行される.

[Conditional("DEBUG_PRINT")]
static void DebugOutput(double[] array) {
  printf("Debug Mode")
}

定義済み属性

標準ライブラリによって提供されている定義済み属性

属性の対象

属性をつける場所によって対象が変わるが,つける位置によってあいまいになることがある.この曖昧さを取り除くため,明示的に属性の対象を指定する構文がある.

[属性の対象:属性名(属性のオプション)]
[method: DllImport("msvcrt.dll")]
[return: MarsharlAs(UnmanagedType.I4)]
public static extern int puts([param: MarshalAs(UnmanagedType.LPStr)] string m)