c 特性 Attribute 學習總結2

2021-10-16 12:36:02 字數 1605 閱讀 2206

通過特性提供額外行為的例項:自定義特性做資料驗證(效驗屬性值的大小和非空)

學生類中有個qq的屬性,效驗qq不能小於100000(5位數),不能大於999999999999(12位數),並且qq的屬性不能為空。如果滿足這些效驗返回true,否則返回false。

宣告乙個抽象類,所有的自定義特性都繼承自這個抽象類,為了確保自定義特性都實現資料效驗的方法。

/// /// 抽象類 基類

///

public abstract class abstractvailddataattribute : attribute

宣告效驗屬性非空的特性:

/// /// 宣告乙個可以對屬性應用 空字串效驗的特性

/// 效驗值是否為空

///

[attributeusage(attributetargets.property)]

public class requireattribute : abstractvailddataattribute

}

宣告效驗屬性值大小的特性:

/// /// 宣告乙個可以對屬性應用longattribute的特性

/// 效驗值的範圍

///

[attributeusage(attributetargets.property)]

public class longattribute : abstractvailddataattribute

public override bool validdata(object ovalue)

}

宣告乙個學生類,並在屬性上面新增上自定義的兩個特性(『long』,『require』):

public class student

public string name

[long(10000, 999999999999)]

[require]

public long qq

}

宣告乙個擴充套件方法,用於呼叫反射來效驗屬性的值:

/// /// 效驗屬性的值

///

///

///

///

public static bool validdataextend(this t t) }}

}return true;

}

呼叫擴充套件方法,驗證特性效果:

static void main(string args)

;if (student.validdataextend())

else

console.readkey();

}

執行結果:

整體實現思路:

1.宣告抽象類(基類)

2.宣告非空效驗特性和數值大小效驗特性 

3.在屬性上面應用特性

4.使用反射訪問特性,效驗數值是否符合要求

C 特性Attribute學習

起初一直糾結於如何呼叫特性附著在下面那個成員的值,後來發現不需要呼叫,通過反射載入的時候是自動繫結上去的,即 獲得成員物件之後,有乙個方法可以獲得特性標籤。其實從類庫提供者,和類庫使用者的角度,分開來看就很容易理解了。類庫提供者 myclasslib類 myclasslib類有乙個showstrin...

C 特性Attribute學習

起初一直糾結於如何呼叫特性附著在下面那個成員的值,後來發現不需要呼叫,通過反射載入的時候是自動繫結上去的,即 獲得成員物件之後,有乙個方法可以獲得特性標籤。其實從類庫提供者,和類庫使用者的角度,分開來看就很容易理解了。類庫提供者 myclasslib類 myclasslib類有乙個showstrin...

c 特性 Attribute 學習總結1

特性是用於在執行時傳遞程式中各種元素 類 方法 結構 列舉 元件等 的行為資訊的宣告性標籤。官方的解讀不好理解,舉個常用的例子,平時會在類的上面加上 serializable serializable就是testclass這個類的乙個特性,它表示這個類是可以被序列化的。如下圖 net框架提供兩種型別...