反射的简单应用(记录)

  最近工作中要用到反射,而之前只是粗浅的了解而已,借着假期,大清早的我就起床来实现了。首先,为了理解反射的实现过程,我重新复习了一遍反射的基本概念相关知识(此处省略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();
        }
    }
}

最终结果如图:

posted @ 2013-04-29 09:52  西安-DB  阅读(561)  评论(0编辑  收藏  举报