使用
反射(Reflect)获取
dll文件中的
类型并
调用方法,具体内容如下
需引用:System.Reflection;
1. 使用
反射(Reflect)获取
dll文件中的
类型并
调用方法(入门案例)
static void Main(string[] args)
//
dll文件
路径
string path = @D:\VS2015Project\001\Computer\bin\Debug\computer.
dll;
//加载
dll文件
Assembly asm = Assembly.LoadFile(path);
首先说一下反射的优点:动态!!!
程序会被编译器编译成dll/exe,一般我们发布的都是这个东西,然后在运行的时候会被CLR/JIT编译成机器码。
为什么不直接通过编译器编译成机器码呢?答案就是:通过CLR/JIT可以根据不同的平台编译成不同的机器码,用以一次编译多平台运行。
微软提供的反射工具主要是 System.Reflection
Assembly assembly1 = Assembly.LoadFile(@"D:\RefTest.dll");//完整路径
Assembly assembly2
string Path = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
Assembly assembly = Assembly.LoadFrom(Path + "\\" +
dllName);
一般使用方法
[System.Runtime.InteropServices.DllImport("E:\\Project\\DLL\\XXX.dll", EntryPoint = "OpenComm", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern int
反射提供描述程序集、模块和
类型的对象(Type
类型)。 可以使用
反射动态地创建
类型的实例,将
类型绑定到现有对象,或从现有对象中获取
类型,然后
调用其方法或访问器字段和属性。 如果代码中使用了特性,可以利用
反射来访问它们
C#反射(Reflection)
反射指程序可以访问、检测和修改它本身状态或行为的一种能力。
程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。
您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
1、反射提高了程序的灵活性和扩展性。
2、降低耦合...
1、已知
类的
调用
既然是已知
类了,为什么还用
反射呢,因为这涉及到工厂模式,比如用数据库的文本来
调用已知的
类里的方法,只要从数据库里获取到方法名以及参数,就可以通过以下方法,直接使用,程序单步的时候,就会发现带入的参数会被执行到所涉及的
类里的方法里去。
/// <summary>
Assembly ass=Assembly.LoadFrom(
DllPath); //利用
dll的
路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.
dll
Assembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名,加载
dll后,需要使用
dll中某
类.
Type type=ass.GetTyp...
今天研究了一下,当指定程序集、类全名、方法名时,给定一个该类的实例,如何调用该实例中指定的方法。
这个功能的背景是这样的:
1、程序中有多个窗体(都继承自Form),保存在一个数组中
2、因为作为父类的Form我是不能新加入任何方法的,所以代码都是现在每个具体的页面里,也就是说,我们只能...
string str = System.IO.Directory.GetCurrentDirectory()+ "/det.
dll";
Assembly asm = Assembly.LoadFile(str);
var type = asm.GetType("Test.Det"