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