C 反射機制來獲取類 屬性的描述

2021-07-25 03:06:44 字數 1983 閱讀 6682

通過c#反射獲取類和類中屬性的描述資訊

自定義特性**

[system.serializable]

[system.attributeusage(attributetargets.class | attributetargets.method, allowmultiple = true, inherited = false)]

[system.runtime.interopservices.comvisible(true)]

public class recordattribute : attribute //注意:自定義特性名稱後面需加attribute

// 對於位置引數,通常只提供get訪問器

public string recordtype }

public string author }

public datetime date }

// 構建乙個屬性,在特性中也叫「命名引數」

public string memo

set

}}

我們發現在這個特性的定義上,又用了三個特性去描述它。這三個特性分別是:serializable、attributeusage 和 comvisible。serializable特性我們前面已經講述過,comvisible簡單來說是「控制程式集中個別託管型別、成員或所有型別對 com 的可訪問性」(微軟給的定義)。這裡我們應該注意到:特性本身就是用來描述資料的元資料,而這三個特性又用來描述特性,所以它們可以認為是「元資料的元資料」(元元資料:meta-metadata)。

allowmutiple 屬性用於設定該特性是不是可以重複地新增到乙個型別上(預設為false),

inherited 就更複雜一些了,假如有乙個類繼承自我們的democlass,那麼當我們將recordattribute新增到democlass上時,democlass的子類也會獲得該特性。而當特性應用於乙個方法,如果繼承自該類的子類將這個方法覆蓋,那麼inherited則用於說明是否子類方法是否繼承這個特性。

定義乙個測試用類

[record("itone", "itone", "2018-8-8")]

[record("itone", "itone", "2018-8-8", memo = "測試儀")]

[record("itone", "itone", "2018-8-8")]

public class testclass

[description("描述使用者的id")]

public string userid

[obsolete("請使用新的方法 ")]

public void sendmsg()

public void sendmsg(string ms)

}

測試**

static void main(string args)

", record.recordtype);

console.writeline(" 日期:", record.date.toshortdatestring());

if (!string.isnullorempty(record.memo))

", record.memo);}}

//獲取這個物件的所有公共屬性

propertyinfo zh = t.getproperties();

foreach (var item in zh)

", record.description);

}}

//通過反射來建立乙個實體

testclass ass = (testclass)assembly.getexecutingassembly().createinstance("demo_one.testclass");

ass.sendmsg("");

}

C 反射機制來獲取類 屬性的描述

namespace demo one 對於位置引數,通常只提供get訪問器 public string recordtype public string author public datetime date 構建乙個屬性,在特性中也叫 命名引數 public string memo set 我們發...

反射dll獲取類屬性方法

assembly asb assembly.loadfrom directory.getcurrentdirectory document.dll 獲取程式集下面的document類 type document asb.gettype document.document 例項化document類物件...

python中類屬性的獲取機制

要訪問類屬性有兩種方式 1.類名.類屬性 2.物件.類屬性 不推薦 法一 class tool 使用賦值語句定義類屬性,記錄所有工具物件的數量 count 0 def init self,name self.name name 讓類屬性的值 1 tool.count 1 tool1 tool 錘子 ...