通過反射調用方法,包括傳參數和獲得返回值【源碼下載】


1、新建一個Node類 

    public class Node
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

2、添加兩個方法,一個用於計算Node的數量,一個用於獲得Node的名稱

        /// <summary>
        /// 計算結點的數量
        /// </summary>
        /// <param name="lstNodes"></param>
        /// <returns></returns>
        public string CalcNodeCount(List<Node> lstNodes)
        {
            return "數量為:" + lstNodes.Count.ToString();
        }
        /// <summary>
        /// 獲得節點的名稱集合
        /// </summary>
        /// <param name="lstNodes"></param>
        /// <returns></returns>
        public string GetNodeNames(List<Node> lstNodes)
        {
            return "名稱列表:" + string.Join(",", lstNodes.Select(c => c.Name).ToArray());
        }

3、進行調用

static void Main(string[] args)
        {
            string strNameSpace = "ReflectionDemo.Program";
            //定義一個方法名稱的數組,用於循環執行
            List<string> lstMethods = new List<string> { "CalcNodeCount", "GetNodeNames" };

            //定義一個需要處理的數據源
            List<Node> lstNodes = new List<Node> { new Node { Id = 1, Name = "中國" }, new Node { Id = 2, Name = "美國" }, new Node { Id = 3, Name = "德國" } };



            Type type = Type.GetType(strNameSpace);//定義一個類型
            object instanceObj = System.Activator.CreateInstance(type); ;//定義一個變量用來存放實例化好的類型

            foreach (string methodName in lstMethods)//循環然后通過反射調用需要執行的方法,並打印出來執行結果
            {
                MethodInfo instanceMethod = type.GetMethod(methodName, new Type[] { typeof(List<Node>) });//定義方法和定義方法的參數

                List<object> lstArgs = new List<object>();
                lstArgs.Add(lstNodes);
                object[] arrayArgs = lstArgs.ToArray();//定義參數

                string strResult = (string)instanceMethod.Invoke(instanceObj, arrayArgs);//調用方法
                Console.WriteLine(strResult);
            }
            Console.ReadLine();
        }

 4、結果如下:

 

源碼下載:下載


免責聲明!

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



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