程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#自定義Attribute

C#自定義Attribute

編輯:C#入門知識

Attribute 類被稱為特性.是一種可由用戶自由定義的修飾符(Modifier),可以用來修飾各種需要被修飾的目標。可以修飾類,接口,屬性,方法等.它不同於注釋,注釋在程序被編譯的時候會被編譯器所丟棄,因此,它絲毫不會影響到程序的執行.而Attribute是程序代碼的一部分,不但不會被編譯器丟棄,而且還會被編譯器編譯進程序(Assembly)的元數據(Metadata)裡,在程序運行的時候,你隨時可以從元數據裡提取出這些附加信息來決策程序的運行。


Framework中我們有時候調用方法,會提示我們該方法已經過時,被某某方法替代,這就是Attribute很用一個用處.

自定義Attribute

做一個對自定義類型進行修飾的Attribute

所有自定義的Attribute必須從Attribute派生 通過AttributeUsage的Attribute限定自己所施加元素的類型

AttributeUsage的參數有三個

ValidOn

該屬性可以自定Attribute放在那些元素上,默認是所有的,all,可以操作的元素有類,集合,接口,字段,屬性,方法,事件等。

[AttributeUsage((AttributeTargets)4, AllowMultiple = false, Inherited = false )],4代表就是“class”元素,其它諸如1代表“assembly”,16383代表“all”等等)或者”.”操做符綁定幾個AttributeTargets 值。(譯者注:默認值為AttributeTargets.All)

AllowMultiple

該屬性標識我們的自定義attribte能在同一語言元素上使用多次。(譯者注:該屬性為bool類型,默認值為false,意思就是該自定義attribute在同一語言元素上只能使用一次)


Inherited

該屬性來控制我們的自定義attribute類的繼承規則。該屬性標識我們的自定義attribute是否可以由派生類繼承,默認是false

下面我們做一個小例子

namespace Attribute1
{
classProgram
{
staticvoid Main(string[] args)
{
//typeof操作符得到了一個與我們AnyClass類相關聯的Type型對象
//通過反射得到Student類的信息,也可以定義Type類
//Typeinfo= typeof(Studnet)
System.Reflection.MemberInfoinof = typeof(Student);
 
 
Hobbyhobbyattr = (Hobby)Attribute.GetCustomAttribute(inof, typeof(Hobby));
 
 
if(hobbyattr != null)
{
//得到我們對類的描述信息,基本的用法
Console.WriteLine("類名:{0}", inof.Name);
Console.WriteLine("興趣類型:{0}", hobbyattr.Type);
Console.WriteLine("興趣指數:{0}", hobbyattr.Level);
}
}
 
 
}
 
[Hobby("Sports",Level=5)]
classStudent
{
publicstring profession;
publicstring Profession
{
get{ return profession; }
set{ profession = value; }
}
 
}
 
[AttributeUsage(AttributeTargets.All,AllowMultiple=false,Inherited=true)]
classHobby : Attribute
{
publicHobby(string _type)
{
this.type= _type;
}
//興趣類型
privatestring type;
publicstring Type
{
get{ return type; }
set{ type = value; }
}
 
//興趣指數
privateint level;
publicint Level
{
get{ return level; }
set{ level = value; }
}
 
}
}

Attribute的用法很廣,這裡只是初始的說了一個開端,對於它的更深處的用法,可以用作校驗器,對底層數據的校驗有很好的作用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved