自定义属性类BookAttribute实例

自定义属性类 阅读目录 一:属性 二:自定义属性类BookAttribute实例 . 属性是由属性类来实现的,向上篇文章《C#温故而知新学习系列之.NET框架高级特性—.NET框架中自身提供的属性(二)》我们讲的Obsolete一样,我们还可以自定义属性类,属性类是由System.Attribute派生而来的 . 在C#中为了方便起见,使用自定义属性时可以省略属性名后面的Attribute,比如:下面讲到的[BookAttribute("自定义属性类")]可以改写为[Books("自定义属性类")] . 自定义属性类的特点 1:使用AttributeUsage属性可以限制属性的用法 AttributeUsage属性包含一个名为AttributeTargets的枚举可以用于指定何处使用自定义的属性,比如:指定属性仅用于类和结构[AttributeUsage(AttributeTargets.Class|AttributeTargets.Struct)] 2:使用AttributeUsage属性可以指定是否可以多次使用属性 在AttributeUsage属性中通过指定AllowMultiple参数的值可以确定是否可以多次使用属性,AllowMultiple值为true表示可以多次使用属性,AllowMultiple值为false表示只能使用一次属性,比如:[AttributeUsage(AllowMultiple=true)] 3:可以设置属性参数 在属性类的构造函数中给出的参数列表即为属性参数 二:自定义属性类BookAttribute实例 1:BookAttribute.cs namespace CustomAttributeClass { //仅限用于类,且可以多次使用属性 [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] //继承自Attribute类 class BookAttribute:Attribute { private string _bookname;//私有字段 /// <summary> /// 书本名称属性 /// </summary> public string BookNmae { get { return _bookname; } set { _bookname = value; } } //构造函数,设置属性参数 public BookAttribute(string strBookName) { this._bookname = strBookName; } } } 2:BookInfo.cs namespace CustomAttributeClass { //多次使用属性类 [Book("ASP.NET深入剖析系列")] [Book("C#完全学习手册")] class BookInfo { public string bookinfo = "图书信息如下"; //构造函数 public BookInfo() { } } } 3:Program.cs static void Main(string[] args) { BookInfo bookinfo = new BookInfo(); object[] bookarr;//对象数组 //获取对象类型,使用typeof方法检索当前的类类型也就是BookInfo MemberInfo typeinfo = typeof(BookInfo); //调用GetCustomAttributes方法获取与BookAttribute类有关的属性列表,该方法返回一个对象数组 bookarr = typeinfo.GetCustomAttributes(typeof(BookAttribute), false); if (bookarr.GetLength(0) != 0) { BookAttribute bookattribute1 = (BookAttribute)bookarr[0];//获取属性类的第一个成员 BookAttribute bookattribute2 = (BookAttribute)bookarr[1];//获取属性类的第一个成员 Console.WriteLine(bookinfo.bookinfo); Console.WriteLine("图书名称为:" + bookattribute1.BookNmae + "—" + bookattribute2.BookNmae); Console.ReadKey(); } }