Are attributes instantiated at the same time as instances of the class to which they are applied?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With