建立一个中间层项目.里面有很多中间层类,如何利用反射得到中间层中的所有类,并调用类中的方法!

解决方案 »

  1.   

    要使用反射首先要引用System.Reflection类
      

  2.   

    http://community.csdn.net/Expert/topic/4318/4318117.xml?temp=9.945315E-02
      

  3.   

    直接下载个reflector自己看得了:http://www.aisto.com/roeder/dotnet/
      

  4.   

    http://search.microsoft.com/search/results.aspx?view=zh-cn&st=a&na=81&qu=%e5%8f%8d%e5%b0%84
      

  5.   

    System.Activator.CreateInstance(...)
    带不带参数都一样.
      

  6.   

    呵呵,他可能实例化了seal类,出现获得零参数的提示
      

  7.   

    Dim asb As [Assembly] = [Assembly].GetExecutingAssembly
            Dim tForm As Type = asb.GetType("BAOPACKERP." & Me.mstrFormDetail)
            Dim oNew As Object() = New Object() {ID}
            Dim frm As Form = Activator.CreateInstance(tForm, oNew)        frm.ShowDialog()
    teng
      

  8.   

    假设另一个工程中的所有类都编译到一个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("SayHello", paramTypes)
    //参数值,如果所调用的方法没有参数,不用写这些
    Object[] parameters = new Object[2];
    parameters[0] = 3;
    parameters[1] = 4;
    object objRetval = p.Invoke(obj, parameters); //如果没有参数,写null即可。
      

  9.   

    using System.Reflection;
    ----------------------------------------------------------------Assembly a = Assembly.LoadFrom(@"D:\MaryKay\CommonBasic\bin\MaryKay.CommonBasic.dll");
    foreach(Type t in a.GetTypes())
    {
    Response.Write(t.NameSpace);//类的命名空间
    Response.Write(t.Name);//类的名称
    }