Csharp-attributes
C#-属性
属性は、コンパイラ命令などのメタデータや、コメント、説明、メソッド、クラスなどの他の情報をプログラムに追加するために使用されます。 .Net Frameworkは、2つのタイプの属性を提供します:事前定義された属性と_custom built_属性。
属性を指定する
属性を指定するための構文は次のとおりです-
属性の名前とその値は、属性が適用される要素の前に、角括弧内で指定されます。 位置パラメータは必須情報を指定し、名前パラメータはオプション情報を指定します。
事前定義された属性
- AttributeUsage
- 条件付き
- 廃止された
AttributeUsage
事前定義された属性 AttributeUsage は、カスタム属性クラスの使用方法を説明しています。 属性を適用できるアイテムのタイプを指定します。
この属性を指定するための構文は次のとおりです-
どこで、
- パラメーターvalidonは、属性を配置できる言語要素を指定します。 列挙子_AttributeTargets_の値の組み合わせです。 デフォルト値は_AttributeTargets.All_です。
- パラメーター_allowmultiple_(オプション)は、この属性の_AllowMultiple_プロパティーの値(ブール値)を提供します。 これが当てはまる場合、属性は多目的です。 デフォルトはfalse(使い捨て)です。
- 継承されたパラメーター(オプション)は、この属性の_Inherited_プロパティの値、ブール値を提供します。 trueの場合、属性は派生クラスに継承されます。 デフォルト値はfalseです(継承されません)。
例えば、
条件付き
この事前定義された属性は、実行が指定された前処理識別子に依存する条件付きメソッドをマークします。
この属性を指定するための構文は次のとおりです-
例えば、
次の例は、属性を示しています-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
廃止された
この事前定義された属性は、使用すべきでないプログラムエンティティをマークします。 特定のターゲット要素を破棄するようコンパイラーに通知できます。 たとえば、新しいメソッドがクラスで使用されており、クラスで古いメソッドを保持したい場合、古いメソッドの代わりに新しいメソッドを使用する必要があるというメッセージを表示することにより、古いメソッドとしてマークすることができます。
この属性を指定するための構文は次のとおりです-
どこで、
- パラメータ_message_は、アイテムが廃止された理由と代わりに使用するものを説明する文字列です。
- パラメーター_iserror_はブール値です。 値がtrueの場合、コンパイラはアイテムの使用をエラーとして扱う必要があります。 デフォルト値はfalseです(コンパイラーは警告を生成します)。
次のプログラムはこれを示しています-
あなたがプログラムをコンパイルしようとすると、コンパイラは次のようなエラーメッセージを出します-
カスタム属性の作成
Net Frameworkを使用すると、宣言型の情報を保存したり、実行時に取得したりできるカスタム属性を作成できます。 この情報は、設計基準とアプリケーションのニーズに応じて、任意のターゲット要素に関連付けることができます。.
カスタム属性の作成と使用には、4つのステップが含まれます-
- カスタム属性の宣言
- カスタム属性の構築
- ターゲットプログラム要素にカスタム属性を適用する
- リフレクションを介して属性にアクセスする
最後のステップでは、簡単なプログラムを作成してメタデータを読み、さまざまな表記法を見つけます。 メタデータは、データに関するデータまたは他のデータの説明に使用される情報です。 このプログラムは、実行時に属性にアクセスするためにリフレクションを使用する必要があります。 これについては、次の章で説明します。
カスタム属性の宣言
新しいカスタム属性は、 System.Attribute クラスから派生する必要があります。 例えば、
上記のコードでは、_DeBugInfo_という名前のカスタム属性を宣言しています。
カスタム属性の構築
_DeBugInfo_という名前のカスタム属性を作成します。この属性には、プログラムのデバッグによって取得された情報が格納されます。 それは次の情報を保存しましょう-
- バグのコード番号
- バグを特定した開発者の名前
- コードの最後のレビューの日付 *開発者のコメントを保存するための文字列メッセージ
_DeBugInfo_クラスには、最初の3つの情報を保存するための3つのプライベートプロパティと、メッセージを保存するためのパブリックプロパティがあります。 したがって、バグ番号、開発者の名前、およびレビューの日付はDeBugInfoクラスの定位置パラメーターであり、メッセージはオプションのパラメーターまたは名前付きパラメーターです。
各属性には少なくとも1つのコンストラクターが必要です。 位置パラメーターは、コンストラクターを介して渡す必要があります。 次のコードは_DeBugInfo_クラスを示しています-
カスタム属性の適用
属性は、そのターゲットの直前に配置することにより適用されます-
次の章では、Reflectionクラスオブジェクトを使用して属性情報を取得します。