C 基礎知識回顧 反射(2)

2022-01-14 15:28:42 字數 1425 閱讀 5743

使用反射呼叫方法:

一旦知道乙個型別所支援的方法,就可以對方法進行呼叫。呼叫時,需使用包含在

methodinfo中的invoke()方法。呼叫形式:

object invoke(object ob, object args)

這裡ob是乙個物件引用,將呼叫它所指向的物件上的方法。對於靜態方法,ob必須為null。

所有需要傳遞給方法的引數都必須在args陣列中指定。如果方法不需要引數,則args必須為null。

另外,陣列args的元素數量引數必須等於引數的數量。invoke()方法返回被呼叫方法的返回值。

要呼叫某個方法,只需在乙個methodinfo例項上呼叫invoke(),該例項通過呼叫

getmethods()

方法獲得。請看事例:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.reflection;

namespace reflection

static

void invokemethdemo()

", t.name);

console.writeline("

本類所提供的方法有:

");methodinfo mi = t.getmethods();

int val;

foreach (methodinfo m in mi)

else

if (m.name == "

set" && pi[0].parametertype == typeof(double))

else

if (m.name.compareto("

sum") == 0) 

",val);

}else

if(m.name.compareto("

isbetween

")==0)

在x和y之間

",args[0]);}}

console.writeline();}}

}}class myclass

public

int sum()

public

bool isbetween(int i)

public

void set(int a, int b)

public

void set(double a, double b)

public

void show()

,y:", x, y);}}

執行結果如下:

C 基礎知識回顧 反射(1)

反射 reflection 是一種允許使用者獲得型別資訊的c 特性。術語 反射 源自於它的工作方式 type物件對映它所代表的底層物件。對type物件進行查詢可以獲得 反射 與型別相關的資訊。反 射是一種 功能強大的機制,它允許學習和使用只在執行時才能知道的型別功能。這些是官方定義,其實說白了,反射...

C 基礎知識回顧 反射(3)

獲取type物件的建構函式 前一篇因為篇幅問題因為篇幅太短被移除首頁,反射這一塊還有一篇 怎樣在程式集中使用反射 其他沒有 什麼可以寫的了,前兩篇主要是鋪墊,在實際應用中,主要是最後兩篇。其實寫完反射,我也考慮重新把委託重新寫下,現在 想想確實太過單一和簡單了。我會把實際開發中委託的例子多寫幾個 以...

c 基礎知識回顧

1.資料型別和類。所有程式設計都是處理輸入和輸出。關於輸入引數,從右至左把引數入棧,這樣根據棧基址,可以定位第乙個引數。因為很多函式是引數數量不定的,比如printf.關於輸出,記得輸出時,一般是把值放入eax 暫存器,所以一般資料型別,直接放入返回值資料,暫存器可以裝下,而返回物件,會返回物件的指...