Attributes are loaded when the Type.GetCustomAttributes()
is called. If you just instantiate the class or even get the type, the attributes are not yet loaded.
See this example:
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");
}
}
This prints out:
Calling AttributeLoadTest.TestStatic():
Loading class
Loading type..
Calling GetCustomAttributes()
ConsoleTestAttribute Constructor
So calling a static method, instantiating the class, getting the type, does not instantiate the attribute. Calling GetCustomAttributes()
does.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…