使用反射呼叫方法:
一旦知道乙個型別所支援的方法,就可以對方法進行呼叫。呼叫時,需使用包含在
methodinfo中的invoke()方法。呼叫形式:
object invoke(object ob, object args)
這裡ob是乙個物件引用,將呼叫它所指向的物件上的方法。對於靜態方法,ob必須為null。
所有需要傳遞給方法的引數都必須在args陣列中指定。如果方法不需要引數,則args必須為null。
另外,陣列args的元素數量引數必須等於引數的數量。invoke()方法返回被呼叫方法的返回值。
要呼叫某個方法,只需在乙個methodinfo例項上呼叫invoke(),該例項通過呼叫
getmethods()
方www.cppcns.com法獲得。請看事例:
複製** **如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.reflection;
namespace reflection
static void invokemethdemo()
", t.name);
console.writeline("本類所提供的方法有:");
vhoyaz; 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#基礎知識回顧--反射(二)
本文位址:
c 基礎知識回顧
1.資料型別和類。所有程式設計都是處理輸入和輸出。關於輸入引數,從右至左把引數入棧,這樣根據棧基址,可以定位第乙個引數。因為很多函式是引數數量不定的,比如printf.關於輸出,記得輸出時,一般是把值放入eax 暫存器,所以一般資料型別,直接放入返回值資料,暫存器可以裝下,而返回物件,會返回物件的指...
C語言基礎知識回顧
逗號運算 scanf和printf輸入 輸出 迴圈 switch break和continue的區別 主函式是乙個程式的入口,整個程式開始執行的位置,乙個程式中最多只能有乙個主函式,也可以沒有。int main void 運算子 含義語法 返回值 與a b ab都真,則真 其他為假 或 a b ab...
MySQL知識回顧 MySQL基礎知識回顧
markdownpad document mysql mysql 是用於管理檔案的乙個軟體 服務端軟體 socket服務端 本地檔案操作 解析指令 sql語句 客戶端軟體 各種各樣 socket客戶端 傳送指令 解析指令 sql語句 ps dbms 資料庫管理系統 sql語句 需要掌握的技能 安裝 ...