属性是否与应用它们的类的实例同时实例化?
问问题
4066 次
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 回答