为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇湘沐 2019-11-19 11:11:52
什么时候运行?它是否对我应用它的每个对象都运行一次,还是只运行一次?它可以做任何事情,或者其动作受到限制吗?
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

在属性构造函数内设置调试器断点,并编写一些反射代码以读取那些属性。您会注意到,只有从relfection API返回属性对象后,才能创建属性对象。属性是每个类的。它们是元数据的一部分。


看看这个:


Program.cs

using 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.cs

using 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 started

MyAttribute created with 15.

15

Program ended

但不必担心属性构造函数的性能。它们是反思的最快部分:-P


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 490 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信