1. ホーム
  2. c#

[解決済み] C#でカスタム属性を作成する方法

2022-05-13 01:01:32

質問

どなたか、カスタム属性のごく基本的な例をコードで説明していただけませんか?

どのように解決するのですか?

カスタム 属性 を作成するコードはかなり単純ですが、属性が何であるかを理解することは非常に重要です。

属性は、プログラムにコンパイルされたメタデータです。属性自体はクラス、プロパティ、またはモジュールに何の機能も追加しません - ただのデータです。しかし、リフレクションを使うことで、機能を作るためにその属性を活用することができます。

では、例えば バリデーション・アプリケーション・ブロック から、Microsoft の エンタープライズ ライブラリ . コード例を見てみると

    /// <summary>
    /// blah blah code.
    /// </summary>
    [DataMember]
    [StringLengthValidator(8, RangeBoundaryType.Inclusive, 8, RangeBoundaryType.Inclusive, MessageTemplate = "\"{1}\" must always have \"{4}\" characters.")]
    public string Code { get; set; }

上記のスニペットから、コードを変更するときはいつでも、バリデータのルール(例では、少なくとも8文字、最大8文字を持っている)に従って、常に検証されるだろうと思うかも知れません。しかし、実際には、Attributeは何もしません。前述のように、プロパティにメタデータを追加するだけです。

しかし、Enterprise Library では Validation.Validate メソッドがあり、オブジェクトを調べて、それぞれのプロパティについて、その内容が属性によって通知されたルールに違反しているかどうかをチェックします。

つまり、これが属性について考えるべき方法です -- 後に他のメソッド/クラス/その他によって使用されるかもしれないデータをコードに追加する方法です。