日期:2014-05-16  浏览次数:20793 次

如何改写这段代码,换掉switch?
现在有一个方法,是给它一个字符串变量,然后实例化同样名称的window窗体并打开。
我用switch是可以实现,但总觉得不舒服,下面可能会有70多个case,不是要死人吗?
求教能不能用其他方法来实现?
理想状态:给这个方法一个字符串变量,就能实例化一个名称跟这个变量一样的window实例? 

 
private void OpenWindow(string strWindowName)
        {
            //获取的变量名来打开对应的窗口
            switch (strWindowName)
            {
                case "Window1":
                    //实例化Window1(已经引用了命名空间,Window1是存在的,可实例化的)
                    Window1 window1 = new Window1();
                    //打开Window1
                    window1.Show();  
                    break;
                case "Window2":
                    Window2 window2 = new Window2();
                    window2.Show();
                    break;
                default:
                    break;
            }
        }

------解决方案--------------------
用反射
Activator.CreateInstance

http://msdn.microsoft.com/en-us/library/d133hta4(v=vs.110).aspx


------解决方案--------------------
赞成用反射
------解决方案--------------------
private form getWindow(string typeName)
{
object ab = Activator.CreateInstance(null, typeName).Unwrap();
return (form)ab;
}
大概这么弄就可以了,typeName要写类型的全名