C#中的自定义属性
在这篇指南里,我们将会看到如何自己创建属性(Attribute),并将其用到不同的程序实体(Entity)上,在程序运行时获取属性信息。
属性(Attribute)是一种新型的声明信息。我们可以使用属性来定义设计时的信息(比如帮助文件、文档的链接),以及运行时的信息(比如将一个类的域与一个XML的域相关联)。我们也可以用属性来创建“自描述”的组件(可以提供该组件的描述信息)。在这篇指南里,我们将会看到如何自己创建属性 (Attribute),并将其用到不同的程序实体(Entity)上,并在程序运行时获取属性信息。
属性的概念 MSDN(ms-help://)里是这样定义的:属性是一个声明的附加声明。
使用预定义的属性
C#已经预定义了一小组的属性供我们使用。在学习如何创建一个自定义的属性前,我们先通过一段代码来看看怎么使用这些预定义的属性吧。
using System;
public class AnyClass
{
[Obsolete("别用Old这个老方法了,请用New方法", true)]
static void Old( ) { }
static void New( ) { }
public static void Main( )
{
Old( );
}
}
在这个例子里我们使用了Obsolete(“陈旧的”)属性,它会将其所修饰的程序实体(类、方法、数据成员等)说明为已废弃不用的。第一个参数—一个字符串说明这个实体为何被废弃、由谁代替。实际上这个字符串的内容你想写什么都可以。第二个参数则告诉编译器将用户对此实体的调用视作一个编译错误。这个参数的缺省值为false,表示编译器仅将用户对其的调用视作警告。编译上面这段代码时,我们将会得到一个编译错误(译注:注意编译错误后附的提示了 吗?):
() is obsolete:“别用Old这个老方法了,请用New方法”
开发自定义的属性
现在开始开发我们自己的属性吧。这儿有一个小窍门:从C#(从抽象基类 ,该派生类都是一个属性类。一个属性类的声明就定义了一种新的属性类型),然后得到了这样一个声 明:
using System;
public class Help : Attribute{}
不管你相不相信,我们已经创建了一个自定义的属性。我们可以像这样用它修饰任何的类:
[Help()]
public class AnyClass{}
注意:
在属性类名与后缀Attribute间存在一个自动的编译转换。因此当我们用一个属性去修饰一个程序实体时,不需要给出Attribute这个后缀。,如果没有找到匹配属性,它就将属性名加上Attribute后缀名后再进行匹配。
目前我们的这个属性还没什么用,让我们加点内容吧。在这个示例里,我们为自定义的属性类添加了一个数据属性Descript
自定义属性 来自淘豆网m.daumloan.com转载请标明出处.