例如某个DLL的命名空间是 A.B 里面有个窗体C
Dll已经引用如果程序不知道这个DLL的结构,只已知2个字符串 "A.B" 和 "C"
请问怎么实例化那个C窗体?? 反射 还是 CodeDom 还是其他?谢谢了!

解决方案 »

  1.   

    using System.Reflection;
    Assembly a = Assembly.LoadFrom("xxx.dll的路径");
    Type[] aa = a.GetTypes();
      

  2.   

    用反射实现即可。
    Assembly assembly = Assembly.Load("A") ;A为程序集名称
    Type t= assembly.GetType("A.B.C",true,true) ;A.B.C为类的全称
    //动态创建实例
    object obj = Activator.CreateInstance (t);
      

  3.   

    System.Reflection.Assembly ass = System.Reflection.Assembly.Load(nameSpace);
    object obj = ass.CreateInstance(className);
    Iobject op = (Iobject)obj;//Iobject为抽象类,是className的父类
      

  4.   

    补充说明一下,
    System.Reflection.Assembly ass = System.Reflection.Assembly.Load(nameSpace);//nameSpace并不是名称空间,而是程序集名称
      

  5.   

    swordragon(古道热肠) ( ) 说得对
    using System.Reflection;
    Assembly assembly = Assembly.LoadFrom("xxx.dll的路径");
    Type[] aa = a.GetTypes();
    foreach(Type a in aa)
    {
        if(a.FullName == "a.b.c")
        {
            object o = assembly.CreateInstance(a, true);
            return o;
        }
    }
    return null;
      

  6.   

    using System.Reflection;
    Assembly assembly = Assembly.LoadFrom("xxx.dll的路径");
    Type[] aa = a.GetTypes();foreach(Type t in aa)
    {
        if(t.FullName == "a.b.c")
        {
            object o = Activator.CreateInstance(t);
        }
    }
      

  7.   

    前些日子学了下反射,应该可以解决
    利用 Type[] FormInf= FormInf.GetTypes()和FormInf.FullName判断c的名称。