我知道一种方法,是用接口和基类,所有的子类都继承接口或基类。
然后创建时用Builder模式进行强制类型转换得到想要的实例。但是现在需要转换一个项目,没有基类。例如类A,类B,类C,都属于Test命名空间,程序集名称为ProjectsBLL.dll问题:
能否根据
System.Reflection.Assembly.Load("ProjectsBLL").CreateInstance("Test.A")创建一个实例,然后用某种转换直接使用这些类里的方法?

解决方案 »

  1.   

    补充下:
    (A)System.Reflection.Assembly.Load("ProjectsBLL").CreateInstance("Test.A")
    这样不行的,因为类的类型是未知的。
      

  2.   

    没有基类和接口,System.Reflection.Assembly.Load("ProjectsBLL").CreateInstance("Test.A")返回的是Object,没办法调用的吧?一定要类型强制转换才能实现所需要的方法的.
      

  3.   

    反射http://d.thec.cn/blackhero/Bak/1.html
      

  4.   

    问题:
    能否根据
    System.Reflection.Assembly.Load("ProjectsBLL").CreateInstance("Test.A")创建一个实例,然后用某种转换直接使用这些类里的方法?
    ----------------你能创建一个实例,那么你就可以直接使用实例的方法和属性了.你是不是问如何使用?
    如果没有基类或接口的话,你是不知道如何使用的.
    但这个功能可以抽象出来.可以使用配置文件来描述操作,给用户以提示.或者将所有操作归类,系统化.比如:读取、配置等。
      

  5.   

    实例是可以的,但是是object类型,因为要使用的类型是动态的,所以不知道怎么动态转换成想要的类型。
    反射么?我找找看……
      

  6.   

    Assembly assembly = Assembly.LoadFrom( "ProjectsBLL.dll");   
    // Create new type
    Type t = assembly.GetType( "clsTestDll.Test.A");Object obj = t.InvokeMember(null,  BindingFlags.DeclaredOnly |
                                         BindingFlags.Public |
                                         BindingFlags.NonPublic | 
      BindingFlags.Instance |                                    BindingFlags.CreateInstance,  null,  null, null );
     t.InvokeMember(方法名, BindingFlags.DeclaredOnly | 
    BindingFlags.Public | 
                                         BindingFlags.NonPublic | 
    BindingFlags.Instance |                                   BindingFlags. InvokeMethod, 
    null,  obj,  new object[]{  } );
      

  7.   

    修改:Type t = assembly.GetType( "ProjectsBLL.clsTestDll.Test.A");
      

  8.   

    修改:Type t = assembly.GetType( "ProjectsBLL.Test.A");