如何实例化后代UserControl?

时间:2009-11-23 23:39:24

标签: c# winforms inheritance user-controls

以下是该方案。我有一堆UserControls都继承自MyBaseControl。我想基于其名称实例化UserControl。例如:

void foo(string NameOfControl) {
    MyBaseControl ctl = null;        
    ctl = CreateObject(NameOfControl);  // I am making stuff up here, 
                                        // CreateObject does not exist
}

如何根据其名称实例化此UserControl。我可以有一个巨大的开关声明,闻起来很糟糕。所有UserControls,包括它们的Base类,都在同一个项目中,并且都具有相同的命名空间。

2 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是通过反射加载类型。由于它们都在同一个程序集/命名空间中,因此您可以执行此操作。否则,您必须单独加载程序集。此外,它假定一个空的构造函数。

MyBaseControl ctl = null;
ctl = (MyBaseControl) typeof(MyBaseControl).assembly.GetType(NameOfControl).GetConstructor(new Type[0]).Invoke(new object[0]);

如果构造函数不是空的,请更改类型/对象数组。

答案 1 :(得分:1)

    void foo(string NameOfControl)
    {
        MyBaseControl ctl = null;
        ctl = (MyBaseControl) Assembly.GetExecutingAssembly().CreateInstance(typeof(MyBaseControl).Namespace + "." + NameOfControl);
    }

上面假设您的每个派生控件类都是默认的无参数构造函数。