关闭

反射技术继续

标签: parametersobjectdllassemblynull
214人阅读 评论(0) 收藏 举报

假设另一个工程中的所有类都编译到一个dll文件中了,在这很多的类当中,有一个类叫StringUtil,名称空间在HSMP.CommonBasic.Common下
该类中有一个方法:
public   double   GetSum(double   x,double   y)
{
return   x+y;
}
编译后dll文件的存放路径是:D:/Test/HSMP.CommonBasic.dll
现在的问题是,如何通过程序调用该dll文件中的GetSum方法
大概有以下几步:
using   System.Reflection;
A.
//这里要用LoadFrom,只有在本工程里添加了该dll的引用后才可以使用Load
Assembly   objAss   =   Assembly.LoadFrom(@ "D:/Test/HSMP.CommonBasic.dll ");
//HSMP.CommonBasic.Common.StringUtil类的全路径
Type   t=objAss.GetType( "HSMP.CommonBasic.Common.StringUtil ");  
//动态生成类StringUtil的实例
object   obj=System.Activator.CreateInstance(t);
//参数信息,GetSum需要两个int参数,如果方法没有参数,就声明一个长度为0的数组
System.Type[]   paramTypes   =   new   System.Type[2];
paramTypes[0]   =   System.Type.GetType( "System.Int32 ");
paramTypes[1]   =   System.Type.GetType( "System.Int32 ");
//找到对应的方法
MethodInfo   p   =   t.GetMethod( "GetSum ",   paramTypes)
//参数值,如果所调用的方法没有参数,不用写这些
Object[]   parameters   =   new   Object[2];
parameters[0]   =   3;
parameters[1]   =   4;
object   objRetval   =   p.Invoke(obj,   parameters);   //如果没有参数,写null即可。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:42247次
    • 积分:609
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:11篇
    • 译文:0篇
    • 评论:4条
    最新评论