反射的简单应用(记录)
最近工作中要用到反射,而之前只是粗浅的了解而已,借着假期,大清早的我就起床来实现了。首先,为了理解反射的实现过程,我重新复习了一遍反射的基本概念相关知识(此处省略N个字)。
先展示下我的第一个反射例子,该实例当中,我是用一个 控制台应用程序,实现最简单的反射程序:主程序(Console Application)反射一个单独的类库DLL文件,去实现该DLL文件内部定义的一个加法运算 Addition(int Num1, int Num2);
namespace MyDLL { public class Operation { public string Addition(int Num1, int Num2) { return string.Format("Num1:{0},Num2:{1}, the Result:{2}" , Num1, Num2, Num1 + Num2); } } }
文库文件中这个方法相当简单,此处只为入门。
编译该类库文件,得到DLL文件,复制到 主程序的Bin 目录,即 Console Application Bin 下 : \反射应用实例\bin\Debug\dlls\MyDLL.dll (关于我这个命名,若你看到并注意到,了解我的意思就行,请不要过于关心这些细枝末节,下同。)
主程序代码如下:
using System; using System.Reflection; namespace 反射应用实例 { class Program { static void Main(string[] args) { string DllPath = @"\dlls\"; string DllName = "MyDLL.dll"; Console.WriteLine("DllPath:{0} \n DLLName:{1}", DllPath, DllName); string BaseDirectory = AppDomain.CurrentDomain.BaseDirectory; Console.WriteLine("要反射的DLL路径:{0}", BaseDirectory + DllPath + DllName); //加载DLL Assembly assembly = Assembly.LoadFrom(BaseDirectory + DllPath + DllName); System.Type type = assembly.GetType("MyDLL.Operation");//获得类型 object obj = System.Activator.CreateInstance(type);//创建实例 MethodInfo method = type.GetMethod("Addition"); object result = method.Invoke(obj, new object[] { 10, 20 }); Console.WriteLine("反射调用并计算结果:{0}", result); Console.ReadKey(); } } }
最终结果如图: