C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でカスタム属性(カスタムアトリビュート)を作成する方法を徹底解説

属性(アトリビュート)とは、コンパイラへの指示や、コメント・説明・メソッド・クラスなどの付加情報といったメタデータをプログラムに追加するための仕組みです。

.NET Frameworkでは、宣言的な情報を格納し、実行時に取得できるカスタム属性を独自に作成することができます。これにより、コードに意味のある情報を持たせ、リフレクションを使って動的に参照することが可能になります。

カスタム属性の基本ルール

新しいカスタム属性を定義するには、System.Attributeクラスから派生したクラスを作成します。また、AttributeUsage属性を付けることで、その属性をどのプログラム要素(クラス、メソッド、フィールドなど)に適用できるかを指定できます。

// クラスおよびそのメンバーに割り当てるカスタム属性 BugFix の定義例
[AttributeUsage(
AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute

DeBugInfoカスタム属性の作成例

ここでは、プログラムのデバッグ作業で得られた情報を保存するための、DeBugInfoという名前のカスタム属性を作成してみましょう。

DeBugInfoクラスには、最初の3つの情報を格納するための3つのプライベートプロパティと、メッセージを格納するためのパブリックプロパティを定義します。

  • バグ番号(bugNo)
  • 開発者名(developer)
  • レビュー日(lastReview)

このうち、バグ番号・開発者名・レビュー日はコンストラクタで必ず渡す必要がある「位置指定パラメータ」となり、messageは省略可能な「名前付きパラメータ」として扱われます。

サンプルコード

// クラスおよびそのメンバーに割り当てるカスタム属性 BugFix の定義
[AttributeUsage(
AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute {
    private int bugNo;
    private string developer;
    private string lastReview;
    public string message;

    public DeBugInfo(int bg, string dev, string d) {
        this.bugNo = bg;
        this.developer = dev;
        this.lastReview = d;
    }

    public int BugNo {
        get {
            return bugNo;
        }
    }

    public string Developer {
        get {
            return developer;
        }
    }

    public string LastReview {
        get {
            return lastReview;
        }
    }
    public string Message {
        get {
            return message;
        }

        set {
            message = value;
        }
    }
}

まとめ

カスタム属性を作成する際のポイントは以下の通りです。

  1. System.Attributeクラスを継承したクラスを定義する
  2. AttributeUsageで適用対象の要素と複数適用の可否(AllowMultiple)を指定する
  3. 必須情報はコンストラクタの引数(位置指定パラメータ)として、任意情報は読み書き可能なパブリックプロパティ(名前付きパラメータ)として実装する

このようにして定義したカスタム属性は、クラスやメソッドに付与することでデバッグ情報などのメタデータを管理でき、リフレクションによって実行時に柔軟に取得することができます。

  1. Androidでカスタムジェスチャーを追加して操作を時短する方法

    Androidデバイスにカスタムジェスチャーを設定すれば、日々のスマホ操作をぐっと快適にできます。自分が一番使いやすい動きで、新しいタブを開くなどの特定のタスクを実行できるように、端末を自由にカスタマイズできるのが魅力です。 例えば、画面の上端からスワイプするだけで最近使ったアプリへアクセスできたら便利だと思いませんか?カスタムジェスチャーがない状態では、クイック設定パネル( Wi-Fiや歯車アイコンなど)にしかアクセスできません。この記事では、代表的なカスタムジェスチャーアプリを紹介しながら、設定方法をわかりやすく解説します。 All in One Gesturesでカスタムジェスチャーを追

  2. Skypeでカスタム背景(仮想背景)を設定する方法【通話前・通話中どちらにも対応】

    パンデミックをきっかけに、オンライン会議やビデオ通話は私たちの新しい日常となりました。多くの企業が完全な在宅勤務やオンラインワークプレイスへ移行し、ビデオ通話アプリへの依存度を一段と高めています。Zoomはインタラクティブな会議機能で爆発的な人気を獲得しましたが、今でもSkypeを業務で活用している企業は少なくありません。そんなSkypeにも、Zoomと同様にビデオ通話で使える「カスタム背景」機能が搭載されました。以前から待ち望まれていた機能であり、これにより自宅からの通話でもプライバシーを守りながら、よりプロフェッショナルな印象を与えられるようになります。カスタム背景機能を使うための要件カス