猿问

自定义属性的构造函数何时运行?

什么时候运行?它是否对我应用它的每个对象都运行一次,还是只运行一次?它可以做任何事情,或者其动作受到限制吗?



潇湘沐
浏览 491回答 3
3回答

Smart猫小萌

在属性构造函数内设置调试器断点,并编写一些反射代码以读取那些属性。您会注意到,只有从relfection API返回属性对象后,才能创建属性对象。属性是每个类的。它们是元数据的一部分。看看这个:Program.csusing System;using System.Linq;[My(15)]class Program{    static void Main(string[] args)    {        Console.WriteLine("Program started");        var ats =            from a in typeof(Program).GetCustomAttributes(typeof(MyAttribute), true)            let a2 = a as MyAttribute            where a2 != null            select a2;        foreach(var a in ats)            Console.WriteLine(a.Value);        Console.WriteLine("Program ended");        Console.ReadLine();    }}MyAttribute.csusing System;[AttributeUsage(validOn : AttributeTargets.Class)]public class MyAttribute : Attribute{    public MyAttribute(int x)    {        Console.WriteLine("MyAttribute created with {0}.", x);        Value = x;    }    public int Value { get; private set; }    }结果Program startedMyAttribute created with 15.15Program ended但不必担心属性构造函数的性能。它们是反思的最快部分:-P
随时随地看视频慕课网APP
我要回答