如果代碼中函數過多,那么通過函數名字符串執行相應的函數會更加方便,也會使代碼更為簡單。
在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[] { "1234567890123" });
注:
Invoke函數的原型如下:
publicObject Invoke(Objectobj,Object[]parameters)
第一個參數為對其調用方法或構造函數的對象。如果方法是靜態的,則應為null,否則必需給出一個實例,若在同一類中調用,則可指定為this。
第二個參數為調用的方法的參數列表。這是一個對象數組,這些對象與要調用的方法或構造函數的參數具有相同的數量、順序和類型。如果沒有任何參數,則 parameters應為nullNothingnullptrnull引用。
函數的返回值便為所調用的函數的返回值,若無返回值,則為null。在獲取返回值前應進行強制類型轉換。
四.示例如下:
using System; using System.Collections.Generic; using System.Text; using System.Reflection;
namespace Practice { class Program { static void Main(string[] args) { Type t = typeof(Program);//括號中的為所要使用的函數所在的類的類名。 MethodInfo mt = t.GetMethod("aabbcc",BindingFlags.Static); if (mt == null) { Console.WriteLine("沒有獲取到相應的函數!!"); } else { string str = (string)mt.Invoke(null,newobject[] { "1234567890123" }); Console.WriteLine(str); } Console.ReadKey(); } private static string aabbcc(string abc) { return abc; } } }