次の方法で共有


属性の使用方法のガイドライン

.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』を参照してください。

参照

概念

使用方法のガイドライン

その他の技術情報

クラス ライブラリ開発のデザイン ガイドライン