カスタム属性の作成 (C# プログラミング ガイド)

更新 : 2008 年 7 月

属性クラスを定義することで、独自のカスタム属性を作成できます。属性クラスは、Attribute の直接的または間接的な派生クラスです。Attribute により、メタデータの中で属性の定義をすばやく簡単に識別できます。クラスと構造体にそれを記述したプログラマの名前でタグを付けるものとします。Author というカスタム属性クラスを定義します。

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct)
]
public class Author : System.Attribute
{
    private string name;
    public double version;

    public Author(string name)
    {
        this.name = name;
        version = 1.0;
    }
}

クラス名は属性の名前の Author です。このクラスは System.Attribute から派生しているので、カスタム属性クラスです。コンストラクタのパラメータはカスタム属性の位置パラメータ (この場合は name) で、パブリックな読み取り/書き込みフィールドまたはプロパティは名前付きパラメータ (この場合は version が唯一の名前付きパラメータ) です。AttributeUsage 属性を使用して、class と struct の宣言に対してのみ Author 属性を有効にしていることに注意してください。

この新しい属性の使用方法は次のとおりです。

[Author("H. Ackerman", version = 1.1)]
class SampleClass
{
    // H. Ackerman's code goes here...
}

AttributeUsage には名前付きパラメータの AllowMultiple があり、これを使ってカスタム属性が 1 回しか指定できない属性か、または複数回指定できる属性かを設定できます。

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // multiuse attribute
]
public class Author : System.Attribute
[Author("H. Ackerman", version = 1.1)]
[Author("M. Knott", version = 1.2)]
class SampleClass
{
    // H. Ackerman's code goes here...
    // M. Knott's code goes here...
}
sw480ze8.alert_note(ja-jp,VS.90).gifメモ :

属性クラスにプロパティが含まれている場合、そのプロパティは読み取り/書き込み可能である必要があります。C# の属性クラスでは、書き込み専用プロパティはサポートされていません。

参照

概念

C# プログラミング ガイド

参照

リフレクション (C# プログラミング ガイド)

属性 (C# プログラミング ガイド)

属性の使用 (C# プログラミング ガイド)

属性の対象の明確化 (C# プログラミング ガイド)

リフレクションによる属性へのアクセス (C# プログラミング ガイド)

System.Reflection

履歴の変更

日付

履歴

理由

2008 年 7 月

プロパティ サポートに関するメモを追加

コンテンツ バグ修正