属性の使用方法のガイドライン
.NET Framework を利用すると、開発者は新しい宣言情報を作成したり、さまざまなプログラム エンティティに対して宣言情報を指定したり、実行時環境で属性情報を取得できます。たとえば、クラスやメソッドなどのプログラム要素に配置できる HelpAttribute
属性を定義して、それらのプログラム要素からドキュメントへの割り当てを実現できます。新しい種類の宣言情報は、位置指定パラメータと名前付きパラメータを受け取る属性クラスの宣言を通じて定義します。属性の詳細については、「カスタム属性の記述」を参照してください。
次の規則は、属性クラスの使用方法のガイドラインを示しています。
カスタムの属性クラスには、次の例に示すように、
Attribute
サフィックスを追加します。Public Class ObsoleteAttribute{}
public class ObsoleteAttribute{}
次の例に示すように、属性に対して
AttributeUsage
を指定して、その使用方法を正確に定義します。<AttributeUsage(AttributeTargets.All, Inherited := False, AllowMultiple := True)> _ Public Class ObsoleteAttribute Inherits Attribute ' Insert code here. End Class
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)] public class ObsoleteAttribute: Attribute {}
属性クラスから派生クラスを作成できないように、属性クラスはできる限りシール クラスにします。
必須パラメータとして位置指定引数 (コンストラクタ パラメータ) を使用します。それぞれの位置指定引数と同じ名前の読み取り専用プロパティを用意します。ただし、両者を区別できるように大文字と小文字だけは変更します。これによって、実行時に引数にアクセスできます。
省略可能なパラメータとして名前付き引数 (読み書き可能プロパティ) を使用します。それぞれの名前付き引数と同じ名前の読み書き可能プロパティを用意します。ただし、両者を区別できるように大文字と小文字だけは変更します。
1 つのパラメータを名前付き引数と位置指定引数の両方として定義しないでください。このパターンを説明するコード例を次に示します。
Public Class NameAttribute Inherits Attribute Private userNameValue as String Private ageValue as Integer ' This is a positional argument. Public Sub New(userName As String) userNameValue = userName End Sub Public ReadOnly Property UserName() As String Get Return userNameValue End Get End Property ' This is a named argument. Public Property Age() As Integer Get Return ageValue End Get Set ageValue = value End Set End Property End Class
public class NameAttribute: Attribute { string userName; int age; // This is a positional argument. public NameAttribute (string userName) { this.userName = userName; } public string UserName { get { return userName; } } // This is a named argument. public int Age { get { return age; } set { age = value; } } }
Portions Copyright 2005 Microsoft Corporation.All rights reserved.
Portions Copyright Addison-Wesley Corporation.All rights reserved.
デザイン ガイドラインの詳細については、2005 年に Addison-Wesley から出版されている Krzysztof Cwalina、Brad Abrams 共著の『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries』を参照してください。