反射 ConstructorInfo
第一步,新建一个类库,写入代码如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace wangjun
{
public class wangjun
{
public int Sum(int i, int j)
{
return i + j;
}
}
}
第二步,将类库的DLL文件复制到新建的程序集目录下,然后在程序集中加入如下代码:
///使用System.Reflection.ConstructorInfo类
///System.Reflection.ConstructorInfo类的实例引用一个构造函数。该类的Invoke()方法在内部
///为构造函数创建了一个后期绑定,并通过这个绑定调用构造函数。因此,通过它们可以创建一个
///该构造函数类型的实例。例如:
///
using System;
using System.Reflection;
class program
{
static void Main()
{
//载入程序集并将引用交线asse变量
Assembly asse = Assembly.Load("wangjun");
//从载入的程序集中得到类型"wangjun.wangjun"
Type type = asse.GetType("wangjun.wangjun");
//将得到的类型传给一个新建的构造器类型变量
ConstructorInfo constructor = type.GetConstructor(new Type[0]);
//使用构造器对象来创建对象
object obj = constructor.Invoke(new Object[0]);
//输出对象类型
Console.WriteLine(obj);
}
}
注意:我加载程序集时使用的是"wangjun" 字符串"wangjun"代表的是程序集的名称,是我在建立类库时在类库的项目中点右键属性在这个里面设置的名称,刚才加载的不是物理文件的名称,物理文件件的名称是"wangjun.dll",如果Assembly.Load()静态方法里面你如果添入物理名称的话,它会显示找不到文件FileNotFond