21

属性は、適用されるクラスのインスタンスと同時にインスタンス化されますか?

4

2 に答える 2

28

Type.GetCustomAttributes()が呼び出されると、属性がロードされます。クラスをインスタンス化するだけ、またはタイプを取得するだけの場合、属性はまだロードされていません。

この例を参照してください。

class Program
{
    static void Main()
    {
        Console.WriteLine("Calling AttributeLoadTest.TestStatic():");
        AttributeLoadTest.TestStatic();
        Console.WriteLine("Loading class");
        var x = new AttributeLoadTest();
        Console.WriteLine("Loading type..");
        var t = typeof (AttributeLoadTest);
        Console.WriteLine("Calling GetCustomAttributes()");
        var ats = t.GetCustomAttributes(false);
    }
}

[ConsoleTest]
class AttributeLoadTest
{
    public static void TestStatic()
    {

    }
}

[AttributeUsage(AttributeTargets.Class)]
class ConsoleTestAttribute : Attribute
{
    public ConsoleTestAttribute()
    {
        Console.WriteLine("ConsoleTestAttribute Constructor");
    }
}

これは印刷されます:

AttributeLoadTest.TestStatic()の呼び出し:

クラスの読み込み

ローディングタイプ。

GetCustomAttributes()の呼び出し

ConsoleTestAttributeコンストラクター

したがって、静的メソッドを呼び出したり、クラスをインスタンス化したり、型を取得したりしても、属性はインスタンス化されません。呼び出しGetCustomAttributes()は行います。

于 2012-08-30T12:33:14.250 に答える
-2

いいえ。属性は型にバインドされているため、型が読み込まれるとインスタンス化されます。

于 2012-08-30T12:18:34.853 に答える