使用抽象工厂模式,在客户端根据窗体名fname创建对应的窗体//客户端:
string fname="Form1"; //在设计器中设计好的窗体的名字,可以是"Form1","Form2"等等;
clsFormFactory MyFormFactory = new clsFormFactory();
Form frmChild =MyFormFactory.CreateForm(fname);
--------------------------------------------------------
//类clsFormFactory:
class clsFormFactory
{
public Form CreateForm(string fname)
{
Form MyForm = null; switch (fname)
{
case "Form1":
MyForm= new Form1();
break;
case "Form2":
MyForm = new Form2();
break;
default :
MyForm = null;
break;
} return MyForm;
}
}
以上调试通过。
--------------------------------------------------------
但是类clsFormFactory中的switch代码块很丑陋,想通过反射机制优化:
class clsFormFactory
{
public Form CreateForm(string fname)
{
Form MyForm = null;
try
{
Type type = Type.GetType(fname, true);//此处出错:无法得到Form1类
MyForm = (Form)System.Activator.CreateInstance(type);
}
catch (TypeLoadException e)
{
MessageBox.Show( e.Message);
}
return MyForm;
}
}请问该如何改正?
string fname="Form1"; //在设计器中设计好的窗体的名字,可以是"Form1","Form2"等等;
clsFormFactory MyFormFactory = new clsFormFactory();
Form frmChild =MyFormFactory.CreateForm(fname);
--------------------------------------------------------
//类clsFormFactory:
class clsFormFactory
{
public Form CreateForm(string fname)
{
Form MyForm = null; switch (fname)
{
case "Form1":
MyForm= new Form1();
break;
case "Form2":
MyForm = new Form2();
break;
default :
MyForm = null;
break;
} return MyForm;
}
}
以上调试通过。
--------------------------------------------------------
但是类clsFormFactory中的switch代码块很丑陋,想通过反射机制优化:
class clsFormFactory
{
public Form CreateForm(string fname)
{
Form MyForm = null;
try
{
Type type = Type.GetType(fname, true);//此处出错:无法得到Form1类
MyForm = (Form)System.Activator.CreateInstance(type);
}
catch (TypeLoadException e)
{
MessageBox.Show( e.Message);
}
return MyForm;
}
}请问该如何改正?
string typeName = "myNamespace.myForm";
Form frm = (Form)Activator.CreateInstance(Type.GetType(typeName));