C 特性Attribute學習

2021-09-08 09:40:09 字數 980 閱讀 3259

起初一直糾結於如何呼叫特性附著在下面那個成員的值,後來發現不需要呼叫,通過反射載入的時候是自動繫結上去的,即 獲得成員物件之後,有乙個方法可以獲得特性標籤。

其實從類庫提供者,和類庫使用者的角度,分開來看就很容易理解了。

類庫提供者(myclasslib類):

myclasslib類有乙個showstring(object obj, string name)方法,可以列印出string資訊。

並且提供乙個stringlenattribute特性,控制字串長度。

類庫使用者:

使用這個名為myclasslib的類,來列印資訊

下面看例子

使用者:

public

class

user

}

use

[stringlen(xx)]

這個是自定義的特性

來看看提供者方面的**

提供者:

定義自定義特性:

[attributeusage(attributetargets.field, inherited = false, allowmultiple = true

)]public

sealed

class

stringlenattribute : attribute

public stringlenattribute(int

len)

}

然後是列印字串這個方法,和應用特性:

public

class

myclasslib}}

console.writeline(name);}}

provider

反射呼叫的話,應該是必須得到物件才能使用裡面成員,所以要傳入2個引數,真正編寫的時候肯定涉及自己的結構類,所以這個問題並不明顯。如果以後找到解決方法,會更新這篇文章。

C 特性Attribute學習

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

c 特性 Attribute 學習總結1

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

c 特性 Attribute 學習總結2

通過特性提供額外行為的例項 自定義特性做資料驗證 效驗屬性值的大小和非空 學生類中有個qq的屬性,效驗qq不能小於100000 5位數 不能大於999999999999 12位數 並且qq的屬性不能為空。如果滿足這些效驗返回true,否則返回false。宣告乙個抽象類,所有的自定義特性都繼承自這個抽...