注
このコンテンツは、 フレームワーク設計ガイドライン (再利用可能な .NET ライブラリの規則、イディオム、パターン、第 2 版) から、Pearson Education, Inc. のアクセス許可によって再印刷されます。 そのエディションは2008年に出版され、その後 、本は第3版で完全に改訂されています。 このページの情報の一部が古くなっている可能性があります。
System.Attribute は、カスタム属性を定義するために使用される基本クラスです。
属性は、アセンブリ、型、メンバー、パラメーターなどのプログラミング要素に追加できる注釈です。 これらはアセンブリのメタデータに格納され、リフレクション API を使用して実行時にアクセスできます。 たとえば、フレームワークは、型またはメンバーに適用して、型またはメンバーが非推奨であることを示す ObsoleteAttributeを定義します。
属性には、属性に関連する追加データを含む 1 つ以上のプロパティを含めることができます。 たとえば、 ObsoleteAttribute
は、型またはメンバーが非推奨になったリリースに関する追加情報と、古い API を置き換える新しい API の説明を伝達できます。
属性の一部のプロパティは、属性の適用時に指定する必要があります。 これらは、位置コンストラクター パラメーターとして表されるため、必須プロパティまたは必須引数と呼ばれます。 たとえば、ConditionStringの ConditionalAttribute プロパティは必須プロパティです。
属性を適用するときに必ずしも指定する必要がないプロパティは、省略可能なプロパティ (または省略可能な引数) と呼ばれます。 これらは、設定可能なプロパティで表されます。 コンパイラは、属性が適用されるときにこれらのプロパティを設定するための特別な構文を提供します。 たとえば、 AttributeUsageAttribute.Inherited プロパティは省略可能な引数を表します。
✔️ カスタム属性クラスにサフィックス "Attribute" という名前を付けます。
✔️ カスタム属性に AttributeUsageAttribute を適用します。
✔️ オプションの引数に設定可能なプロパティを指定してください。
✔️ 必要な引数に対して取得専用のプロパティを指定してください。
✔️ 必要な引数に対応するプロパティを初期化するコンストラクター パラメーターを指定します。 各パラメーターには、対応するプロパティと同じ名前 (大文字と小文字が異なる) が必要です。
❌ 省略可能な引数に対応するプロパティを初期化するコンストラクター パラメーターを指定しないでください。
つまり、コンストラクターとセッターの両方で設定できるプロパティはありません。 このガイドラインでは、どの引数が省略可能で必要かを非常に明確にし、同じことを行う 2 つの方法を回避します。
❌ カスタム属性コンストラクターのオーバーロードを回避します。
コンストラクターが 1 つだけの場合、どの引数が必要で、どの引数が省略可能であるかをユーザーに明確に伝えます。
✔️ 可能であれば、カスタム属性クラスをシールします。 これにより、属性の検索が高速になります。
Portions © 2005, 2009 Microsoft Corporation. 無断転載を禁じます。
フレームワーク設計ガイドライン:再利用可能な .NET ライブラリの規則、イディオム、パターン、Krzysztof Cwalina および Brad Abrams による第 2 版は、2008 年 10 月 22 日に Microsoft Windows 開発シリーズの一部として Addison-Wesley Professional によって公開されました。