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);
}
}
}