属性とは、コード要素に情報を追加するための言語構造です。
属性には次の2つの形式があります。
属性を定義するには、System.Attributeクラスを継承したクラスを使用します。
要素の属性を指定するには、属性の名前として型の名前を使います。このとき型名のサフィックスAttributeは省略することができます。また引数を持たない場合は、かっこも省略できます。従って以下の4つは、同等の意味を持ちます。
属性によってはパラメータを渡せるものがあります。
[ 属性クラス( 位置パラメータ, 名前付きパラメータ = 値 ) ]
| パラメータの種類 | 渡される先 |
|---|---|
| 位置パラメータ | 属性クラスのコンストラクタの引数 |
| 名前付きパラメータ | 属性クラスのプロパティおよびフィールド |
属性の適用される対象 (ターゲット) は、通常は直後に続くコード要素です。しかし対象を明示的に指定することで、それを変更することができます。
[ ターゲット : 属性クラス ]
ターゲットを指定するには、次のキーワードを使用します。
1つのコード要素に複数の属性を指定できます。方法は次のように2つあります。
[ 属性クラス1 ] [ 属性クラス2 ]
[ 属性クラス1, 属性クラス2 ]
メタデータを拡張します。これによって、コードに特別な情報を追加できます。
メタデータ
データについてのデータ。あるデータそのものではなく、そのデータに関連する情報のこと。
メタデータとは【meta data】 - 意味/解説/説明/定義 : IT用語辞典
| 属性 | 説明 |
|---|---|
| AttributeUsage | 新しい属性をコンパイル時にどのように扱うかを指定 |
| Conditional | 指定のsymbolをコード内に定義していない場合に、そのメソッドへの呼び出しを省略するようにコンパイラに指示 |
| Obsolete | そのターゲットが古くなっていて推奨されないことを示す |
| CLSCompliant | CLSへの準拠を検証するかどうかをコンパイラに指示 |
| Serializable | ターゲットがシリアライズ可能であることを示す |
| NonSerialized | ターゲットがシリアライズ不可能であることを示す |
System.Attributeクラスまたはその派生クラスから派生したクラスを作成することで、独自の属性を定義できます。