正在阅读:由C++转向C#需要注意的变化(四)由C++转向C#需要注意的变化(四)

2004-11-18 15:52 出处:CSDN 作者:AustinLei 责任编辑:linjixiong

  这样,在源代码中就可以一目了然地了解bug的修正情况,但如果如果把相关的资料保存在数据库中可能会更好,这样就更方便我们的查询工作了。如果所有的bug报告都使用相同的语法那就更好了,但这时我们就需要一个定制的属性了。我们可能使用下面的内容代替代码中的注释:


  [BugFix(323,"JesseLiberty","1/1/2005")Comment="Offbyoneerror"]

  与C#中的其他元素一样,属性也是类。定制化的属性类需要继承System.Attribute:


  publicclassBugFixAttribute:System.Attribute

  我们需要让编译器知道这个属性可以跟什么类型的元素,我们可以通过如下的方式来指定该类型的元素:


  [AttributeUsage(AttributeTargets.ClassMembers,AllowMultiple=true)]

  AttributeUsage是一个作用于属性的属性━━元属性,它提供的是元数据的元数据,也即有关元数据的数据。在这种情况下,我们需要传递二个参数,第一个是目标(在本例中是类成员。),第二个是表示一个给定的元素是否可以接受多于一个属性的标记。AllowMultiple的值被设置为true,意味着类成员可以有多于一个BugFixAttribute属性。如果要联合二个属性目标,可以使用OR操作符连接它们。


  [AttributeUsage(AttributeTargets.Class|AttributeTargets.Interface,AllowMultiple=true)]

  上面的代码将使一个属性隶属于一个类或一个界面。

  新的自定义属性被命名为BugFixAttribute。命名的规则是在属性名之后添加Attribute。在将属性指派给一个元素后,编译器允许我们使用精简的属性名调用这一属性。因此,下面的代码是合法的:


  [BugFix(123,"JesseLiberty","01/01/05",Comment="Offbyone")]

  编译器将首先查找名字为BugFix的属性,如果没有发现,则查找BugFixAttribute。

  每个属性必须至少有一个构造器。属性可以接受二种类型的参数:环境参数和命名参数。在前面的例子中,bugID、编程人员的名字和日期是环境参数,注释是命名参数。环境参数被传递到构造器中的,而且必须按在构造器中定义的顺序传递。


  publicBugFixAttribute(intbugID,stringprogrammer,stringdate)
  {
  this.bugID=bugID;
  this.programmer=programmer;
  this.date=date;
  }

  Namedparametersareimplementedasproperties.


键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品