如果**中函式過多,那麼通過函式名字串執行相應的函式會更加方便,也會使**更為簡單。
在c#中,通過函式名字串執行相應的函式這項功能是在system. reflection命名空間中實現的,使用的函式為getmethod。若要使用此功能只需如下三步。
一.getmethod函式定義在虛基類type類中,在使用函式前應先獲取乙個type物件,**為:
type t=typeof(program); //括號中的為所要使用的函式所在的類的類名。
二.通過物件t便可以使用getmethod函式了,**如下:
methodinfo mt = t.getmethod("aabbcc",bindingflags.static);
注:getmethod函式有6個過載函式,其中常用的有2個。
publicmethodinfo getmethod(stringname)
publicmethodinfo getmethod(stringname,bindingflagsbindingattr)
name為所要使用的函式名 bindingattr為搜尋範圍
第乙個函式對 name的搜尋區分大小寫。搜尋範圍包括公共靜態方法和公共例項方法。若搜尋的函式不在此範圍內,則應使用第二個函式。
若成功搜尋到函式,則返回非null值,否則返回非空值,在向下執行前應檢查一下返回值,否則會報錯。
三.獲取到非空的methodinfo類的例項mt後便可執行所要的函式了。
string str = (string)mt.invoke(null,newobject );
注:invoke函式的原型如下:
publicobject invoke(objectobj,objectparameters)
第乙個引數為對其呼叫方法或建構函式的物件。如果方法是靜態的,則應為null,否則必需給出乙個例項,若在同一類中呼叫,則可指定為this。
第二個引數為呼叫的方法的引數列表。這是乙個物件陣列,這些物件與要呼叫的方法或建構函式的引數具有相同的數量、順序和型別。如果沒有任何引數,則 parameters應為nullnothingnullptrnull引用。
函式的返回值便為所呼叫的函式的返回值,若無返回值,則為null。在獲取返回值前應進行強制型別轉換。
四.示例如下:
using system;using system.collections.generic;
using system.text;
using system.reflection;
namespace practice
else
);console.writeline(str);
}console.readkey();
}private static string aabbcc(string abc)
}}
199 c 通過函式名字串呼叫函式
今天寫c的作業時候想起來能不能用函式名字串來呼叫函式 第乙個問題,函式名如何儲存,我們需要用到函式指標 type func type type 該語句宣告了乙個指標func,它指向了乙個函式,這個函式帶有了2個type型引數並返回乙個type的值。p.s.type型別可以被看成是int啊或者是flo...
通過同名字串來呼叫函式
相信使用python的各位童鞋,總會有這樣的需求 通過乙個同名的字串來呼叫乙個函式。其他的語言是如何實現,不太清楚。但是python提供乙個強大的內建函式getattr 可以實現這樣的功能。getattr 的函式原型為 getattr object,str name 其返回物件object中名字為s...
python 使用函式名的字串呼叫函式
deffoo print foo defbar print bar func list foo bar for func in func list func typeerror str object isnot callable我們希望遍歷執行列表中的函式,但是從列表中獲得的函式名是字串,所以會提示...