理解C#反射

参考文章:http://blog.csdn.net/educast/article/details/2894892

上面的文章将C#反射要用到的方法都给出了,下面我将写个例子,帮助理解

【1.使用反射读取程序集】

namespace Ref
{
    class Program
    {
        static void Main(string[] args)
        {
            //读取程序集
            Assembly ass = Assembly.Load("Ref");
            //获取Ref程序集中的Program类
            Type t = ass.GetType("Ref.Program");
            //根据获取到的类创建实例
            object o = Activator.CreateInstance(t);
            //获取方法
            MethodInfo mi = t.GetMethod("Show");
            //反射调用自己的方法(需要传递其类,如果是静态方法则不需要传递o,写成null就行)
            mi.Invoke(o, null);
        }

        public void Show()
        {
            Console.WriteLine("显示22");
        }
    }
}

 【2.通过类库DLL文件的反射】

[链接:使用VS制作Dll文件]http://blog.csdn.net/u010026134/article/details/51598499

使用VS的功能,添加新建项目---类库,比如写了以下代码

namespace MyDll
{
    public class Class1
    {

    }

    public class SayAndSee
    {
        public string say = "isOk?";

        public void MyFun()
        {
            string see = "isee";
            Console.WriteLine("我看见你了");
        }

        public int Cau(int num1, int num2)
        {
            return num1 + num2;
        }
    }
}

然后点击生成---生成解决方法,这样我们就可以在DEBUG目录下获取到这个类的Dll文件了,获取其DLL文件路径

接下来就可以去使用了

namespace RefDLL
{
    class Program
    {
        static void Main(string[] args)
        {
            //读取DLL文件
            Assembly assembly = Assembly.LoadFrom(@"C:\Users\zts.FORTUNE\Documents\Visual Studio 2015\Projects\Test3\RefDLL\bin\Debug\MyDll.dll");
            //获取MyDll程序集中的SayAndSee类
            Type t = assembly.GetType("MyDll.SayAndSee");
            //根据获取到的类创建实例
            object o = Activator.CreateInstance(t);
            //获取方法
            MethodInfo mi = t.GetMethod("MyFun");
            //反射调用自己的方法(需要传递其类,如果是静态方法则不需要传递o,写成null就行)
            mi.Invoke(o, null);
        }
    }
}

 

posted @ 2017-04-28 18:04  三页菌  阅读(289)  评论(0编辑  收藏  举报