閱讀目錄
一:屬性
二:自定義屬性類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();
}
}