1. 主页
  2. 文档
  3. C#进阶
  4. 第三章 反射
  5. 第一节 反射的概念,加载Dll文件

第一节 反射的概念,加载Dll文件

exe/dll(主要区别是exe文件有入口)---metadata元数据是exe/dll文件的一个数据清单,----反射用来操作元数据。
【1】更新程序时(更新自己的DLL)
【2】使用别人的DLL文件(这种可以读取别人私有的东西)
【3】反射就是一个操作metadata的一个类库,可以当成一个小工作能读取或操作元数据。
【4】使用场合:MVC,ORM, LOC,AOP,几乎所有的框架都会使用反射。
 static void Main(string[] args)
 {           
         Console.WriteLine("---------------------------Reflection------------------------");
            //添加其它项目中的exe/dll到自己的项目中,要在自己的项目中添加引用,把其它项目中的Dll引进来才可以使用。或者拷贝DLL到自己的项目中
         Assembly assembly = Assembly.Load("DB.MySqlClass"); //加载方式一,dll文件名
         //Assembly assembly = Assembly.LoadFile(@"H:\视觉\MethodDemo\MethodDemo\DB.MySqlClass\bin\Debug\DB.MySqlClass.dll");//加载方式二
         //Assembly assembly = Assembly.LoadFrom("DB.MySqlClass.dll"); //加载方式三,完全限定名
         foreach (var type in assembly.GetTypes())
        {
              Console.WriteLine(type.Name);
              foreach (var method in type.GetMethods())   //获取类型中的方法
              {
                    Console.WriteLine("这是" + method.Name + "方法");
                }
           }
        Console.Read();
}

在一个解决方案中添加一个DB.IntFace接口类库,并在其中添加IDBHelper接口,DB.MySqlClass继承接口的类库并实现IDBHelper接口。因为继承接口这样更通用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DB.IntFace;

namespace DB.MySqlClass
{
    public class MySqlHelper : IDBHelper
    {
        public MySqlHelper()
        {
            Console.WriteLine("{0}.被构造", this.GetType().Name);
        }
        public void Query()
        {
            Console.WriteLine("{0}.Query", this.GetType().Name);
        }
    }
}
这篇文章对您有用吗? 1

我们要如何帮助您?