正在阅读:C# 特性(Attribute)入门教程C# 特性(Attribute)入门教程

2005-06-15 10:06 出处: 作者:sadaf alvi 翻译:cppbug 责任编辑:moningfeng
到目前为止,这个特性还没有起到什么作用。下面我们来添加些东西给它使它更有用些。

using System; public class HelpAttribute : Attribute { public HelpAttribute(String Descrition_in) { this.description = Description_in; } protected String description; public String Description { get { return this.description; } } } [Help("this is a do-nothing class")] public class AnyClass { }

  在上面的例子中,我们给HelpAttribute特性类添加了一个属性并且在后续的部分中我们会在运行时环境中查寻它。   定义或控制特性的使用   AttributeUsage类是另外一个预定义特性类,它帮助我们控制我们自己的定制特性的使用。它描述了一个定制特性如和被使用。   AttributeUsage有三个属性,我们可以把它放置在定制属性前面。第一个属性是:   ValidOn   通过这个属性,我们能够定义定制特性应该在何种程序实体前放置。一个属性可以被放置的所有程序实体在AttributeTargets enumerator中列出。通过OR操作我们可以把若干个AttributeTargets值组合起来。   AllowMultiple   这个属性标记了我们的定制特性能否被重复放置在同一个程序实体前多次。   Inherited   我们可以使用这个属性来控制定制特性的继承规则。它标记了我们的特性能否被继承。   下面让我们来做一些实际的东西。我们将会在刚才的Help特性前放置AttributeUsage特性以期待在它的帮助下控制Help特性的使用。

using System; [AttributeUsage(AttributeTargets.Class), AllowMultiple = false, Inherited = false ] public class HelpAttribute : Attribute { public HelpAttribute(String Description_in) { this.description = Description_in; } protected String description; public String Description { get { return this.description; } } }

  先让我们来看一下AttributeTargets.Class。它规定了Help特性只能被放在class的前面。这也就意味着下面的代码将会产生错误:

[Help("this is a do-nothing class")] public class AnyClass { [Help("this is a do-nothing method")] //error public void AnyMethod() { } }

  编译器报告错误如下:   AnyClass.cs: Attribute 'Help' is not valid on this declaration type.   It is valid on 'class' declarations only.
键盘也能翻页,试试“← →”键

关注我们

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