When are Attribute instances created?

前端 未结 2 633
慢半拍i
慢半拍i 2020-12-18 19:10

Are attributes instantiated at the same time as instances of the class to which they are applied?

相关标签:
2条回答
  • 2020-12-18 19:28

    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.

    0 讨论(0)
  • 2020-12-18 19:43

    No. Attributes are bound to the type and thus instantiated when the type is loaded.

    0 讨论(0)
提交回复
热议问题