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 回答