使用反射呼叫方法:
一旦知道乙個型別所支援的方法,就可以對方法進行呼叫。呼叫時,需使用包含在
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 暫存器,所以一般資料型別,直接放入返回值資料,暫存器可以裝下,而返回物件,會返回物件的指...