原創 C 反射知識分享之二

2022-05-04 21:21:07 字數 3356 閱讀 9071

·3

使用methodinfo

發現以下資訊:方法的名稱、返回型別、引數、訪問修飾符(如

public

或private

)和實現詳細資訊(如

abstract

或virtual

)等。使用

type

的getmethods

或getmethod

方法來呼叫特定的方法。

example3 :

assembly assem1 = assembly.load("classlibrary1, version=1.0.0.0, culture=neutral, publickeytoken=null");

assembly assem = assembly.loadfrom("classlibrary1.dll");

console.write(assem.fullname);

assemblyname assemname = assem.getname();

console.writeline("\nname: ", assemname.name);

console.writeline("version: .",

assemname.version.major, assemname.version.minor);

int i,j;

type types = assem.gettypes();

for (i = 0; i < types.getlength(0); ++i)

type mytype = types[0];

methodinfo methods=mytype.getmethods();

for (i = 0; i < methods.length; i++)

", methods[i].name);

console.writeline("public : ", methods[i].ispublic);

console.writeline("private : ", methods[i].isprivate);

console.writeline("static : ", methods[i].isstatic);

console.writeline("abstract : ", methods[i].isabstract);

console.writeline("isvirtual : ", methods[i].isvirtual);

console.writeline("返回型別¨ª : ", methods[i].returntype.tostring());

foreach (parameterinfo pi in ((methodinfo)methods[i]).getparameters())

, name=", pi.parametertype, pi.name);

}console.writeline("---------------");

}}

列印結果如下:

method'name        : run

public        : true

private        : false

static        : false

abstract        : false

isvirtual        : false

返回型別       : system.void

method'name        : myreturnmethod

public        : true

private        : false

static        : false

abstract        : false

isvirtual        : false

返回型別       : system.string

引數 parameter: type=system.string, name=abc

引數 parameter: type=system.int32, name=i

method'name        : myreturnmethod

public        : true

private        : false

static        : false

abstract        : false

isvirtual        : false

返回型別        : system.string

引數 parameter: type=system.string, name=abc

引數 parameter: type=system.int32, name=i

引數 parameter: type=system.string, name=a

4.使用constructorinfo了解建構函式的名稱、引數、訪問修飾符(如pulic 或private)和實現詳細資訊(如abstract或virtual)等。使用type的getconstructors或getconstructor方法來呼叫特定的建構函式。 

example4:

assembly assem1 = assembly.load("classlibrary1, version=1.0.0.0, culture=neutral, publickeytoken=null");

assembly assem = assembly.loadfrom("classlibrary1.dll");

console.write(assem.fullname);

assemblyname assemname = assem.getname();

console.writeline("\nname: ", assemname.name);

console.writeline("version: .",

assemname.version.major, assemname.version.minor);

int i,j;

type types = assem.gettypes();

type mytype = types[0];

constructorinfo constructorinfoobj = mytype.getconstructor(

bindingflags.instance | bindingflags.public, null,

callingconventions.hasthis, types, null);

if(constructorinfoobj != null)

else

C 反射技術之二讀取Attribute特性

我們可以通過乙個類的type的getcustomattributes方法來讀取這個類上所附加的特性。class keyattribute attribute 定義特性 標籤 keyattribute 打上特性 標籤 public int key讀取到類所對應的表的特性了,接下來我們該讀取類裡包含的屬...

C 知識點之二

inq 初體驗 linq 全稱為language integrated query 語言繼承查詢 語法 from 變數in 資料來源物件where 條件表示式orderby排序列 ascending descending group 變數by 分組條件into 臨時識別符號select 選擇列 li...

C 基礎知識之二

c 基礎知識之二 1 靜態字段 靜態成員 被類的所有例項共享,對其改變,對所有例項都可見。2 宣告為靜態的有 字段 方法 屬性 建構函式 運算子 事件。3 常量與靜態量不同 常量沒有自己的儲存位置,在編譯時被編譯器替換。4 類屬性與類字段不同 屬性是乙個函式成員,它不為資料儲存分配記憶體並執行 5 ...