反射动态调用DLL类库测试

定义:
可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道

同一个功能不用反射同样能实现,那为什么一定要用反射,一直不太明白他的作用,但C#里推崇较甚,今天到网上查了段反射动态调用DLL类库的代码,调试了下通过了

说明:通过System.Reflection.Assembly动态调用classTest.dll 中GetStr(string strValue)的方法,而不做添加引用操作
      classTest.dll 包含方法 public static string GetStr(string strValue);参数是什么则返回什么
      测试DLL下载:/Files/lmjob/classTest.rar

 

代码如下:

System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile("D:\\ProjectTest\\classTest\\classTest\\bin\\Debug\\classTest.dll");  //通过路径载入动态库
        Type t = asm.GetType("classTest.Class1");  //得到Class
        System.Reflection.ConstructorInfo conn = t.GetConstructor(new Type[0]); //获取没有参数的构造函数 
        object a1 = conn.Invoke(new object[0]);  //调用没有参数的构造函数Invoke,返回object它其是a类
        System.Reflection.MethodInfo meth = t.GetMethod("GetStr", new Type[] { typeof(String) }); //获取参数类型为string,函数名为GetStr的方法
        string aa = meth.Invoke(a1, new object[] { "我是中国人" }).ToString(); //在a1上调用GetStr方法,参数为"我是中国人"

        Response.Write("值:" + aa);    //输入值    正确结果为“我是中国人”

补充一、通过Load反射创建实例:
System.Reflection.Assembly ass = System.Reflection.Assembly.Load("Xys.METS.Model");
Xys.METS.Model.DUTY_INFO info = (Xys.METS.Model.DUTY_INFO )ass.CreateInstance
("Xys.METS.Model.DUTY_INFO");

info.DutyName = "aaa";

Response.Write(info.DutyName);


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值