C#動態執行函式:利用反射實現

pamxy發表於2013-11-09

轉自:http://hi.baidu.com/lomasoft/item/c051dddb4cc5e7e954347f88

希望能夠在通過指定方法的字串就能夠執行類庫中的任何函式.在js中可以使用eval asp中可以使用Execute vb中好象也有eval. 
using System.Reflection;名稱空間包含提供載入型別、方法和欄位的有組織的檢視的類和介面,具有動態建立和呼叫型別的功能。

using System.Reflection; 
namespace myCommon 

   public class CExecuteMethod 
   { 
         /// <summary> 
         /// 根據字元執行方法 
         /// </summary> 
         /// <param name="path">名稱空間</param> 
         /// <param name="className">類名</param> 
         /// <param name="MethodName">方法名</param> 
         /// <param name="parameters">引數</param> 
         /// <returns>返回object型別</returns> 
       public static object Execute(string path,string className,string MethodName,params object[] parameters) 
       { 
             //動態從程式集中查詢所需要的類並使用系統啟用器建立例項最後獲取它的Type 
             Type type=Assembly.Load(path).CreateInstance(path+"."+className).GetType(); 
             //定義引數的個數,順序以及型別的儲存空間; 
             Type[] parametersLength; 
             if (parameters != null) 
             { 
                 //如果有引數建立引數儲存空間並依次設定型別 
                 parametersLength = new Type[parameters.Length]; 
                 int i=0; 
                 foreach (object obj in parameters) 
                 {                     
                     parametersLength.SetValue(obj.GetType(),i); 
                     i++; 
                 } 
             } 
             else 
             { 
                 //沒有引數就為空 
                 parametersLength = new Type[0]; 
             } 
             //查詢指定的方法 
             MethodInfo methodinfo = type.GetMethod(MethodName,parametersLength); 
             //如果是靜態方法就執行(非靜態我沒試過) 
             if (methodinfo.IsStatic) 
             { 
                 //呼叫函式 
                 return methodinfo.Invoke(null, parameters); 
             } 
             return null; 
     } 
   } 
}


相關文章