一尘不染

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

c#

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


阅读 182

收藏
2020-05-19

共1个答案

一尘不染

构造函数何时运行?尝试一个示例:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Creating MyClass instance");
        MyClass mc = new MyClass();
        Console.WriteLine("Setting value in MyClass instance");
        mc.Value = 1;
        Console.WriteLine("Getting attributes for MyClass type");
        object[] attributes = typeof(MyClass).GetCustomAttributes(true);
    }

}

[AttributeUsage(AttributeTargets.All)]
public class MyAttribute : Attribute
{
    public MyAttribute()
    {
        Console.WriteLine("Running constructor");
    }
}

[MyAttribute]
class MyClass
{
    public int Value { get; set; }
}

输出是什么?

Creating MyClass instance
Setting value in MyClass instance
Getting attributes for MyClass type
Running constructor

因此,当我们开始检查属性时,将运行属性构造函数。请注意,属性是从类型而不是类型的实例中获取的。

2020-05-19