【发布时间】:2012-08-30 12:16:01
【问题描述】:
属性是否与应用它们的类的实例同时实例化?
【问题讨论】:
标签: .net attributes
属性是否与应用它们的类的实例同时实例化?
【问题讨论】:
标签: .net attributes
在调用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() 即可。
【讨论】:
没有。属性绑定到类型,因此在加载类型时实例化。
【讨论】:
GetCustomAttributes()都会创建一个新实例。