属性是否与应用它们的类的实例同时实例化?
答案 0 :(得分:22)
调用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()
即可。
答案 1 :(得分:-2)
没有。属性绑定到类型,因此在加载类型时实例化。