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