特性Attribute
一、认识属性Attribute
- 属性Attribute是一个类,可以用于标识类或类下属性/方法的特性描述
- 如下定义了一个类
class huanghai
{
public int Id { get; set; }
public int Name { get; set; }
public string SayHi() {
return "hahahah";
}
}
- 在主函数中调用,编译和运行没任何问题
- 假如在这个类上,用系统自带的Obsolete属性标注,这个属性用来提示或报警调用者的
- 此时编译就会警告提示,这个类是不能用的,但是强制运行也是没问题的
- 转到Obsolete类的定义可以看到,它是继承了Attribute类,构造函数有三个。上面我们用的是第二个,带一个strin参数的构造函数
- 假如我们用第三个构造函数如下
- 编译时直接报警,不能运行
二、自定义属性Attribute
- 上述时使用系统自带的属性,也可以自己定义属性如下,定义一个类名,然后跟Obsolete类一样继承了Attribute类
class hhAtrribute:Attribute
{
public hhAtrribute( )
{
}
public hhAtrribute(string mStr)
{
Desciption = mStr;
}
public string Desciption { set; get; }
public string Desciption2 { set; get; }
}
- 在应用类中就可以用这个自定义的属性去修饰类了,目前这个自定义属性没有任何操作。只是单单做一个修饰作用,所以对这个类对象的编译和运行没有任何影响
- 上面是使用它的构造函数,也可以直接访问它内部的public成员
- 既然自定义属性是一个类,那么它也可以写自定义方法的,只不过这个方法目前还不能调用,是做给后面假如用到反射功能用的。
- 一个类可以有多个属性描述
- 一个属性默认对于某一个类只能描述该类一次,假如描述两次则会报错
- 假如需要描述多次,可以在自定义的属性中,加配置属性(即属性的属性)
效果:
- 上面 [AttributeUsage(AttributeTargets.All,AllowMultiple =true)]是用来描述自定义属性hhAtrribute的属性
- 第一个参数是个枚举类型,用来表示自定义属性hhAtrribute可以描述那些结构
AttributeTargets.All //所有
AttributeTargets.Class//只能描述类
AttributeTargets. Method//只能描述方法
AttributeTargets. Struct//只能描述结构体
………
- 第二个参数AllowMultiple,表示时候能对同一个结构多次描述
- 它还有另外一个参数Inherited,表示时候可以再被继承