试图找到关于属性复杂性的一些详细参考。任何帮助将不胜感激。
此时,我特别想知道在运行时运行属性构造函数的时间是什么时候?
感谢。
答案 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
}
}