在运行时的什么时候运行属性构造函数?

时间:2009-03-06 00:17:07

标签: c# .net attributes

试图找到关于属性复杂性的一些详细参考。任何帮助将不胜感激。

此时,我特别想知道在运行时运行属性构造函数的时间是什么时候?

  • 如果是在课堂上
  • 如果是在财产上
  • 如果是方法

感谢。

4 个答案:

答案 0 :(得分:3)

在类型或MemberInfo上调用GetCustomAttributes()时,将调用构造函数。

答案 1 :(得分:3)

阅读规范(C#2.0版本中的17.3.2),未指定。只有从元数据转换为实例的方式是。

因此,您可能需要对不同的实现进行测试,因为如果未指定它,则必然会以不同的方式进行解释。

答案 2 :(得分:2)

唯一可以肯定的是,它会在需要之前被调用。它没有定义构造函数被调用的确切时间。

无论如何,行为是未指定的,因此您不应该依赖当前实现调用构造函数。

答案 3 :(得分:0)

属性是用于存储有关类型的元数据或信息的装饰。 .Net框架在创建实例时大量利用这种信息来进行额外的处理。

该属性仅在其他类询问时构造,例如Type.GetCustomAttributes()。因此,即使您可以创建自己的属性,然后询问您的自定义属性。

public class MyOwnAttribute: Attribute {}

/ *在另一个班级* /

的某个时刻
void CheckIfClassIsDecoratedWithMyOwnAttribute()
{
    var instance = new MyClass();
    if (instance.GetType().GetCustomAttributes(typeof(MyOwnAttribute)))
    {
       //do whatever you want
    }
}