比方,我在配置文件里面设定了<ClassInfo ClassName = "Class1"></ClassInfo> 
然后我就可以取到他的类名是Class1了,然后我想实现Class1 class1 = new Class1();这样的代码,也就是这个代码里面的类名是和我的配置文件有关的,能不能作到啊?
如果用名字不行,那么用类型可以吗?比方我知道了某个Type a = typeof(Class1);同样的我希望能够通过a实现上面的代码,可以吗?

解决方案 »

  1.   

    当然前提是不用if else 或者Switch去做
      

  2.   

    反射是可以,参看
    http://blog.csdn.net/knight94/archive/2006/05/17/742324.aspx
    中使用Type.InvokeMember的部分
      

  3.   

    Activator.CreateInstance("ClassName");
      

  4.   

    Type type = System.Reflection.Assembly.LoadFile("abc.dll").GetType("namespace.Class1");
    object obj = System.Activator.CreateInstance(type);
    type.GetMethod("method name").Invoke(obj,new object[]{"参数1","参数2"});
      

  5.   

    采用InvokeMember的话,必须出现基类,也就是我必须为Class1定义个基类BaseClass1,那有什么办法可以不出现基类呢?
    因为我设计的时候我的基类是Abstract的,我现在要做的主要是针对VS 2005里面的BindingSource,我想把里面的Current对象转换为Class1,但是不希望通过直接写(Class1)BindingSource.Current来实现,而希望这个Class1可以通过配置文件读取进来,大家帮我想想办法啊
      

  6.   

    (GetType("Class1"))BindingSource.Current
      

  7.   

    使用反射机制,比如
    使用反射生成一个窗体:
    private void button1_Click(object sender, System.EventArgs e)
    {
    Assembly assm = Assembly.LoadFrom("e:\\WindowsApplication.dll");
    Type TypeToLoad= assm.GetType("WindowsApplication.Form1");

    object obj;
    obj = Activator.CreateInstance(TypeToLoad);
    Form formToShow = null;
    formToShow = (Form)obj;
    formToShow.Show();

    }
      

  8.   

    楼上还是出现了基类啊
    有没有办法基类不出现的
    在你的这个例子里面WindowsApplication.Form1是从Form里面继承过来的,我希望可以不出现基类Form
      

  9.   

    讨论ASP。NET 2.0 新技术 QQ群:20810637(顶者有好报~)