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:条件属性类

posted on 2007-06-22 12:42  晓木  阅读(125)  评论(0编辑  收藏  举报