自定義屬性的作用
有時候我們需要給乙個類或者類中的成員加上一些屬性或者附加資訊,讓類或者變數的功能更明確可控制的細粒度更高,打個簡單的比方:資料庫裡面的一張表,表中的每乙個欄位都有很多屬性,如是否主鍵,預設值,注釋資訊等等,我們在編寫實體類的時候,如何表示這些資訊呢?通過自定義屬性可以實現。
自定義屬性的實現步驟
我說了不算,權威說了算:
宣告乙個類,並將 attributeusageattribute 屬性應用到該類中。類的名稱即為新屬性的名稱
宣告該類從 system.attribute 繼承:
定義 private 欄位來儲存屬性值:
需要時,請為屬性建立建構函式:
為屬性 (attribute) 定義方法、欄位和屬性 (property):
例項乙個:
屬性類(和相關列舉)
//////
資料庫欄位的用途。
///public
enum
enumdbfieldusage
[attributeusage(attributetargets.property, inherited
=true
)]public
class
dbfieldattribute:attribute
public
dbfieldattribute(
string
fieldname) :
this
(fieldname,
null
, enumdbfieldusage.none,
null
)public
dbfieldattribute(
string
fieldname, enumdbfieldusage usage) :
this
(fieldname,
null
,usage,
null)//
獲取該成員對映的資料庫欄位名稱。
public
string
fieldname
set}
//獲取該字段的預設值
public
object
defaultvalue
set}
}此**說明了如何製作自定義屬性類。其實跟一般的類的區別就是此類繼承自attribute,加上attributeusage是屬性上的屬性,是可選的。
資料訪問層實體類:
class
dalobj
[dbfield("id
",enumdbfieldusage.primarykey)]
public
intid
set}
[dbfield(
"name
",defaultvalue="
遊客")]public
string
name
set}
[dbfield(
"pwd")]
public
string
password
set}
}此**說明了如何使用自定義的屬性。有兩點需要注意的地方
第一:類名可以跟自定義的類名一樣,也可以加上或減去後面的attribute,本例子中就是使用的時候跟自定義的類名減少了「attribute」。
第二:屬性引數填寫方法,如果自定義屬性類(例子中dbfieldattribute)自己的建構函式帶引數,那麼這些引數是必選的,可以過載建構函式以滿足不同組合,必選引數填完之後,可以繼續給自定義屬性類中的公共成員帶命名地賦值,如例子中的 defaultvalue="遊客" 一句就是命名引數。
遍歷自定義屬性的**:
dalobj dalobj
=new
dalobj(
"users");
stringbuilder sb
=new
stringbuilder();
foreach
(propertyinfo proinfo
indalobj.gettype().getproperties())
}messagebox.show(sb.tostring());
此**說明了如何檢索自定義屬性的值,主要用到了getcustomattributes來獲取屬性值。
C 中自定義屬性的例子
自定義屬性的作用 有時候我們需要給乙個類或者類中的成員加上一些屬性或者附加資訊,讓類或者變數的功能更明確可控制的細粒度更高,打個簡單的比方 資料庫裡面的一張表,表中的每乙個欄位都有很多屬性,如是否主鍵,預設值,注釋資訊等等,我們在編寫實體類的時候,如何表示這些資訊呢?通過自定義屬性可以實現。自定義屬...
C 中自定義屬性的例子
自定義屬性的作用 有時候我們需要給乙個類或者類中的成員加上一些屬性或者附加資訊,讓類或者變數的功能更明確可控制的細粒度更高,打個簡單的比方 資料庫裡面的一張表,表中的每乙個欄位都有很多屬性,如是否主鍵,預設值,注釋資訊等等,我們在編寫實體類的時候,如何表示這些資訊呢?通過自定義屬性可以實現。自定義屬...
自定義屬性之xml檔案中自定義的屬性
在 中,我們有時會看到 的布局中或有我們沒見過的屬性例如 建立attrs.xml檔案,如下 這是因為使用的自定義屬性,下來我們了解一下具體步驟 新建乙個自定義類myattribute public class myattribute extends view private int myage pr...