1. ホーム
  2. c#

[解決済み] カスタム属性のコンストラクタはいつ実行されるのですか?

2023-07-03 11:16:38

質問

いつ実行されるのですか?適用するオブジェクトごとに実行されるのですか、それとも一度だけですか? 何でもできるのですか、それとも動作が制限されているのですか?

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

コンストラクタはいつ実行されるのでしょうか?サンプルで試してみてください。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Creating MyClass instance");
        MyClass mc = new MyClass();
        Console.WriteLine("Setting value in MyClass instance");
        mc.Value = 1;
        Console.WriteLine("Getting attributes for MyClass type");
        object[] attributes = typeof(MyClass).GetCustomAttributes(true);
    }

}

[AttributeUsage(AttributeTargets.All)]
public class MyAttribute : Attribute
{
    public MyAttribute()
    {
        Console.WriteLine("Running constructor");
    }
}

[MyAttribute]
class MyClass
{
    public int Value { get; set; }
}

そして、その出力は?

Creating MyClass instance
Setting value in MyClass instance
Getting attributes for MyClass type
Running constructor

つまり、属性を調べ始めると属性コンストラクタが実行されるわけです。属性は型のインスタンスではなく、型から取得されることに注意してください。