Q-->question A-->answer M-->mention
The Chapter 17th Attribute
Q:C#中自定义的语法细则如何?
A:可以将属性封闭到每一对[]中,也可以将多个属性以逗号隔开封闭的一个[]中,其顺序无关紧要,若实例构造器是无参的,则圆括号可有可无,而Attribute后缀亦是可选的
M:应该将属性想像成一个逻辑状态容器,但一般情况下不推荐使用公共字段,而更多地使用properties,将使其更灵活.
M:应使用AttributeUsageAttribute将属性的使用范围圈定,其方式为用AttributeTargets.All等,此为一个位标志,若定义属性时未使用AttributeUsage,那将是所有. 也就是AttributeUsage的默认,并且是可继承
Q:CustomAttribute的价值是什么?
A:通过实现一些代码来检查在某些目标上是否存在该属性类的实例,然后执行一些逻辑分支.
检测方法==> Type.IsDefined(typeof(类型),false)
也可以使用System.Attribute定义的方法,如==> IsDefined(),GetCustomAttributes()和GetCustomAttribute(),以上均静态.此中三个方法通过在元数据上进行反射,从而查找与CLS相容的自定义的属性实例,但如果只是推测,则应该使用IsDefined()
M:如果重写了Attribute的Match(),则必须重写Equals()
M:使用System.Reflection.CustomAttributeData可以更安全的应用,获得属性的相关信息,其主要是用ReflectionOnlyLoad()加载程序集
Q:用什么方法可以避免元数据无谓膨胀?
A:条件属性类