zoukankan      html  css  js  c++  java
  • 理解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);
            }
        }
    }
  • 相关阅读:
    Linux手动安装Apache2.4
    Linux 定时任务 crontab
    微信小程序 wxs 使用正则替换字符串
    腾讯云 远程通过端口3306访问MYSQL数据库
    微信小程序点击内容展开隐藏评论文章等
    SGA设置
    oracle 序列
    oracle中lnnvl函数
    union 中null值合并原理
    oracle 事务读一致性(一)
  • 原文地址:https://www.cnblogs.com/sanyejun/p/6782766.html
Copyright © 2011-2022 走看看