最近做项目过程中遇到了这个类,查了下MSDN,是这么说的。
Attribute类:表示自定义属性的基类。
看到了就有点蒙圈了,这到底是用来干什么的呢?
从网上查了一些资料后,就有点明白了,都说它就好比是一个附着物,用来定义额外的信息。举个例子说一下吧!我们做程序开发的时候,如何确定方法是谁开发的?当然你可以在方法上添加注释,用来表明这个方法是谁敲的,除此之外呢?还有其他方法吗?
这时这个类就派上用场了。通过继承此类,可以自定义一个属性类,然后附加的形式来为需要添加的类或者方法添加额外的属性。
Demo展示
<span style="font-family:SimSun;font-size:18px;"> /// <summary> /// 自定义额外属性的类 /// </summary> class ClassAttribute : Attribute { private string name { set; get; } public ClassAttribute(string Name) { this.name = Name; } }</span>
上面就是自定义额外属性的类,那么如何利用呢?
<span style="font-family:SimSun;font-size:18px;"> [Class("学生类",Age=12)] class Student ///默认第一个不赋值的为构造函数类型的赋值,走的是构造函数 { [Class("Football")] public string profession; public string Profession { get { return profession; } set { profession = value; } } }</span>
就是这么简单通过打标签的形式,就可以为类、接口、方法等添加额外的属性。
那么这时候,你可能会问,我已经添加了,那么如何来读取我添加的额外的属性呢?
Attribute类有20多个GetCustomAttribute的方法,通过这个方法就可以读取定义的额外的属性。
<span style="font-family:SimSun;font-size:18px;"> static void Main(string[] args) { //使用反射读取Attribute System.Reflection.MemberInfo info = typeof(Student); //通过反射得到Student类的信息 ClassAttribute hobbyAttr = (ClassAttribute)Attribute.GetCustomAttribute(info, typeof(ClassAttribute)); if (hobbyAttr != null) { Console.WriteLine("学生年龄:{0}", hobbyAttr.Age); } }</span>
上面就是通过调用GetCustomAttribute的方法来读取自定义的额外的属性操作。下面来用一张图来总结一下。
小结
大家可以试想一下,从宏观上知道了此类的作用,以后那些地方可以用到,用起来更方便简洁。