c#關於反射的簡單用法含源碼(實名類操作以及未知dll使用)

反射這個高大上的詞彙常常聽說,很少用到,最近有個項目剛好接觸到,順別記錄下用法。

1、已知類的調用

既然是已知類了,爲什麼還用反射呢,因爲這涉及到工廠模式,比如用數據庫的文本來調用已知的類裏的方法,只要從數據庫裏獲取到方法名以及參數,就可以通過以下方法,直接使用,程序單步的時候,就會發現帶入的參數會被執行到所涉及的類裏的方法裏去。

 /// <summary>
        /// 動態調用類中的方法、傳入參數,並獲得返回值
        /// </summary>
        /// <param name="para"></param>
        /// <returns></returns>
        private string getMethod(int para)
        {
            Type t = typeof(funcCls);//類名
            MethodInfo mt = t.GetMethod("add");//加載方法名
            string DoRet = mt.Invoke(this, new object[] { para }).ToString();//執行返回結果        }
            return DoRet;
        }

 

2、未知dll的使用

已知dll的使用是比較常見的,只要引入之後,基本上都比較順利。但是未知的dll就算複製到debug下,就不知道該做什麼了,接下來是顯示所有的dll屬性方法和字段,當然因爲是完整輸出,所以會帶有其父類的方法。其中有個疑問,導出的方法如何知道其使用方法,比如有幾個參數,返回什麼數據類型等,希望有人能回答。

 

 /// <summary>
        /// 顯示出所有的類以及屬性方法字段
        /// </summary>
        public void loadDll()
        {
            String path = Environment.CurrentDirectory + "\\UcanDotNET.dll";  // 加載動態鏈接庫實際路徑
            Assembly assmbly = Assembly.LoadFile(path);

            Type[] types = assmbly.GetTypes();//類的集合
            foreach (var classitem in types)//循環輸出所有的類以及該類的字段、方法和屬性
            {
                richTextBox1.AppendText("★★★ 類:" + classitem.Name + "\n");

                foreach (var fileditem in classitem.GetFields())
                {
                     richTextBox1.AppendText("字段名:" + fileditem.Name+"\n");
                }
                foreach (var methodItem in classitem.GetMethods())
                {
                     richTextBox1.AppendText("方法名:" + methodItem.Name+"\n");
                 }
                foreach (var properties in classitem.GetProperties())
                {
                    richTextBox1.AppendText("屬性名:" + properties.Name + "\n");
                }


            }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章