C#通過函數名字符串執行相應的函數


如果代碼中函數過多,那么通過函數名字符串執行相應的函數會更加方便,也會使代碼更為簡單。

在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; } } }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM