110,571
社区成员
发帖
与我相关
我的任务
分享
public FormX CreateFormX()
{
var st = ConfigurationManager.AppSettings["FormX"];
if(st=="FormA")
return new FormA();
else if(st=="formB")
return new FormB();
else
return new FormX();
}
有不同的实现CreateFormX的方法(例如反射)。但是这都是小伎俩。关键地是,在原来的代码中,你只应该破坏一条代码,这个CreateFormX返回的窗体都是FormX(只不过可能是其扩展自类的实例),于是你就不用担心也不用担心原来的辛辛苦苦写的那些代码被轻易破坏了。这就是面向对象设计。var theForm = new FormX();
theForm.User = "asdfafdsa";
theForm.ABC=......
现在需要扩展到多态的不同子类实例,那么对于原来的代码只应该破坏一条代码,即果断改为var theForm = CreateFormX();
theForm.User = "asdfafdsa";
theForm.ABC=......
然后你可以在实现CreateFormX,让它返回不同的对象。这些对象既可能是FormX的实例,也可能是从FormX继承的其它类型对象的实例。你的问题中就应该把不同用户的不同窗体实现为原来窗体的子类。