• 理解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);
            }
        }
    }
  • 相关阅读:
    前置++和后置++的区别
    snmp数据包分析
    [codeforces538E]Demiurges Play Again
    [codeforces538D]Weird Chess
    [BZOJ3772]精神污染
    [BZOJ4026]dC Loves Number Theory
    [BZOJ1878][SDOI2009]HH的项链
    [BZOJ3658]Jabberwocky
    [BZOJ3932][CQOI2015]任务查询系统
    [BZOJ3551][ONTAK2010]Peaks加强版
  • 原文地址:https://www.cnblogs.com/sanyejun/p/6782766.html
Copyright © 2020-2023  润新知