1.特性 定义
Attribute用来对类、属性、方法等标注额外的信息,贴一个标签(附着物)
通俗:给 类 或 类成员 贴一个标签,就像航空部为你的行李贴一个标签一样
注意,特性 是 类 和 类的成员 标签,不是对象的!
官方定义:公共语言运行时允许添加类似关键字的描述声明,叫做Attributes; 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和.Net文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。
我们简单的总结为:定制特性attribute,本质上是一个类,其为目标元素提供关联附加信息,并在运行期以反射的方式来获取附加信息。具体的特性实现方法,在接下来的讨论中继续深入。
1.1 Attribute 自定义特性类
Attribute就是类,Attribute类名一般都以Attribute结尾
展开
1.2 Attribute 带数据的特性类
展开
1.3 获取特性里的数据
展开
1.4 自定义Attribute
Attribute都从System. Attribute类继承,类名一般以Attribute结尾
创建构造函数
标记类的用途—AttributeUsage标记(标记的标记):
AttributeTargets:可以添加到哪些成员上。
AllowMultiple:是否允许在一个成员上标记这个Attribute的多个实例,默认false。标注在Attribute类的类名上方。
展开
1.5 练习:正则表达式校验Attribute
写正则表达式验证器,在属性上根据需要添加RegexValidatorAttribute。这种用法在
ASP.Net MVC中用的非常多
class Customer
{
[RegexValidator(@"^S+@S+$")]
public string Email{ get; set; }
[RegexValidator(@"^d{15}$|^d{18}$")]
public string IdNumber{ get; set; }
}
编写Validate方法,在Validate方法中会对标记了RegexValidator的属性采用指定的正则表达
式进行数据校验。步骤:
1、开发RegexValidatorAttribute,提供保存正则表达式的Pattern属性,以及一个接受正则表达式的构造函数。用AttributeUsage标记RegexValidatorAttribute只能添加到属性上。
2、 Validate方法中取得obj对应的Type对象,遍历type.GetProperties()所有属性,如果属性是string类型,并且定义了RegexValidator,取得RegexValidator对象,读取对象的Pattern对象多和正则表达式。
3、获得属性的值string value = prop.GetValue(obj, null) as string,用正则表达式进行校验
1.6 图解特性