C 通過函式名字串執行相應的函式

2022-06-21 12:48:07 字數 1414 閱讀 3063

如果**中函式過多,那麼通過函式名字串執行相應的函式會更加方便,也會使**更為簡單。

在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我們希望遍歷執行列表中的函式,但是從列表中獲得的函式名是字串,所以會提示...