属性 (Attribute)

属性とは、コード要素に情報を追加するための言語構造です。

属性には次の2つの形式があります。

  1. 共通言語ランタイム (CLR) に定義されている属性
  2. ユーザーが作成するカスタム属性
グループ別の属性 - Visual C++ 属性リファレンス

属性クラス (System.Attribute)

属性を定義するには、System.Attributeクラスを継承したクラスを使用します。

要素の属性を指定するには、属性の名前として型の名前を使います。このとき型名のサフィックスAttributeは省略することができます。また引数を持たない場合は、かっこも省略できます。従って以下の4つは、同等の意味を持ちます。

  • [ Serializable ]
  • [ Serializable() ]
  • [ SerializableAttribute ]
  • [ SerializableAttribute() ]

属性パラメータ

属性によってはパラメータを渡せるものがあります。

[ 属性クラス( 位置パラメータ, 名前付きパラメータ = 値 ) ]
パラメータの種類 渡される先
位置パラメータ 属性クラスのコンストラクタの引数
名前付きパラメータ 属性クラスのプロパティおよびフィールド

属性ターゲット

属性の適用される対象 (ターゲット) は、通常は直後に続くコード要素です。しかし対象を明示的に指定することで、それを変更することができます。

[ ターゲット : 属性クラス ]

ターゲットを指定するには、次のキーワードを使用します。

  • assembly
  • module
  • type
  • method
  • property
  • field
  • param
  • event
  • return

複数の属性の指定

1つのコード要素に複数の属性を指定できます。方法は次のように2つあります。

[ 属性クラス1 ]
[ 属性クラス2 ]
[ 属性クラス1, 属性クラス2 ]

カスタム属性

メタデータを拡張します。これによって、コードに特別な情報を追加できます。

メタデータ

データについてのデータ。あるデータそのものではなく、そのデータに関連する情報のこと。

メタデータとは【meta data】 - 意味/解説/説明/定義 : IT用語辞典

事前定義の属性

特別な扱いを受ける事前定義の属性
属性 説明
AttributeUsage 新しい属性をコンパイル時にどのように扱うかを指定
Conditional 指定のsymbolをコード内に定義していない場合に、そのメソッドへの呼び出しを省略するようにコンパイラに指示
Obsolete そのターゲットが古くなっていて推奨されないことを示す
CLSCompliant CLSへの準拠を検証するかどうかをコンパイラに指示
Serializable ターゲットがシリアライズ可能であることを示す
NonSerialized ターゲットがシリアライズ不可能であることを示す

独自の属性を定義

System.Attributeクラスまたはその派生クラスから派生したクラスを作成することで、独自の属性を定義できます。