C 自定義特性Attribute要點

2021-10-09 05:40:13 字數 1738 閱讀 9065

新增乙個特性類:(其中attributeusage)可以修飾此特性類可修飾的型別)類命名後面習慣以(attribute)結尾,如類名display後面加attribute作為類名,就是displayattribute,此類要繼承attribute,建立乙個建構函式,帶乙個(string)引數,用以初始化乙個私有字段(自定義屬性的名稱),再加個公開返回此字段的方法:m

新增乙個屬性的擴充套件方法:靜態類+靜態方法,(this propertyinfo propertyinfo),只要這乙個引數,判斷(propertyinfo.isdefined)這個屬性如果有第1步定義的特性類,則例項化(propertyinfo.getcustomattribute)特性類,呼叫第1步定義的方法:m運用:在實體類定義裡,在屬性上面加特性類的名稱:(displayattribute),其中attribute可以省略;

運用:在主函式裡,反射遍歷乙個實體的屬性,呼叫屬性的靜態方法返回屬性的自定義名稱,沒有自定義名稱就返回屬性名稱;

其他如驗證屬性值長度、必填等等的特性,區別在於:定義擴充套件方法時,第2個引數為類實體,也就是說要傳入實體,如這樣:public static bool lenghtrange(this propertyinfo propertyinfo, student student),多個student引數;

還可以給類、方法定義特性,通過反射不同的元資料(類或者方法methodinfo)即可;

public

class

zdisplaynameattribute

:attribute

public

string

getdisplayname()

}

/// 

/// 反射類,遍歷類所有屬性(propertyinfo),如果有指定特性,則呼叫此方法,就能返回自定義屬性名稱

///

///

///

public

static

string

getcusdisplayname

(this

propertyinfo propertyinfo)

return _displayname;

}

public

class

student

//相當於呼叫zdisplaynameattribute的建構函式

[zdisplayname

("學生名稱")]

public

string name

//呼叫zlenghtrangeattribute的建構函式

[zlenghtrange(10

,20)]

public

string password

}

public

static

void

printinstance

(student student)

:\t\t驗證結果:");

}}

理解自定義特性 Attribute

假設 外語老師 是乙個類,那麼 外語老師 應該具有這樣的特性 會說外語 並且 會說外語 這一特性又包含一些資訊,比如 外語種類 外語水平 其它資訊。按照這樣的理解,應該有下面的實現。using system using system.reflection namespace test console...

C 使用自定義的特性Attribute

c 程式設計經常使用特性,相當於類的元資料 自定義特性繼承system.attribute類 自定特性命名字尾為attribute,這樣符合微軟的命名風格,也符合編譯器的搜尋規則 使用語法使用自定義特性 可以使用反射來檢視自定義特性 attributeusage attributetargets.c...

C 自定義特性

code1 using system using system.collections.generic using system.linq using system.text namespace mylibrary.attributeclass 對於位置引數,通常只提供get訪問器 public s...