c#屬性,以及特性類
Property
對類來說:屬性成員描述的是狀態資訊,對類的例項來說,屬性成員的值表示的是該物件的狀態值。
1、如果類Z是抽象的,包含它的類A 也應該是抽象的。
2、重寫屬性的宣告必須與指定與所繼承的屬性相同的修飾符,型別等
3、如果被繼承的屬性只有單個訪問器(讀或者寫),重寫屬性也只能單個訪問器。如果被繼承的屬性有兩個訪問器,重寫屬性可以只包含一個,也可包含兩個
4、重寫屬性可以包含seal修飾符,此修飾符可以防止派生類重寫該屬性
Attribute(特性)類
為實體型別(類、介面、方法、屬性)描述附加資訊的方法。一旦程式碼的實體被附加了資訊,就可以在執行時獲得這些資訊。
Attribute本質上就是一個類,它附著在目標物件上最終例項化
- 不通過new操作符來產生例項,而是使用在方括號裡呼叫構造方法來產生例項。
- 方括號必須緊挨著放置在被附著目標的前面。
- 因為方括號裡空間有限,所以不能使用物件初始化器給物件的屬性(Property)賦值,必須使用含參構造方法對Attribute例項中的屬性賦值。
派生於System.Attribute類
使用方法:
1、 定義Attribute類
2、 使用Attribute類
3、 查詢Attribute類
使用格式:
放在[ ]即可
[顯示說明符:特徵列表]
可以使用帶引數的Attribute類[Attribute類名(位置引數表,命名引數表)]
位置引數表:即建構函式的引數
命名引數表:Attribute例項中的屬性的賦值
注意:對一個特性類名使用Attribute字尾是一個慣例,也可不新增,系統會自動新增。
Attribute類的查詢
1、使用GetCustomAttribute或者GetCustomAttributes方法查詢,查詢指定程式碼實體上指定特徵型別
2、使用反射機制查詢
查詢程式碼實體成員上的特徵資訊
AttributeUsage有三個屬性,我們可以把它放置在定製屬性前面。
第一個屬性:ValidOn,通過這個屬性,我們能夠定義定製特性應該在何種程式實體前放置
第二個屬性: AllowMultiple ,這個屬性標記了我們的定製特效能否被重複放置在同一個程式實體前多次
第三個屬性是: Inherited ,我們可以使用這個屬性來控制定製特性的繼承規則。它標記了
當特性被放置在一個基類上時,它能否被派生類所繼承。