런타임에 winform 패널의 컨트롤을 동적으로 추가 및 바꾸는 중입니다.상속을 공장 패턴으로 인터페이스로 대체하는 방법은 무엇입니까?
모든 작업을 수행 할 수 있지만 baseUserControl에서 상속하는 것이 아니라 인터페이스를 구현해야한다고 들었습니다.
내가 인터페이스 내 공장을 코딩 할 방법
를 사용하여 동일한 결과를 얻을 수있는 방법을 참조 나는 모든 오전하지만 난 해달라고?
어떻게 개선하고 대신 인터페이스를 사용할 수 있습니까? 여기
//Simplified noddy example
//Client code
var controlA = ControlFactory
.Create("UserControlA") as UserControlA;
panel1.Controls.Add(ControlA);
//Factory
public class ControlFactory
{
public static BaseUserControl Create(string name)
{
switch (name)
{
case "UserControlA":
var userControlA = new UserControlA();
return userControlA;
case "UserControlB":
var userControlB = new UserControlB();
return userControlB;
}
return null;
}
}
//BaseUserControl
public partial class BaseUserControl : UserControl
{
public BaseUserControl()
{
InitializeComponent();
}
public virtual void DoSomething()
{
}
}
public partial class UserControlA : BaseUserControl
{
public UserControlA()
{
InitializeComponent();
}
public override void DoSomething()
{
//Do something here
}
}
public partial class UserControlB : BaseUserControl
{
public UserControlB()
{
InitializeComponent();
}
public override void DoSomething()
{
//Do something here
}
}
이 http://codereview.stackexchange.com/ – GolfWolf
이유에 대한 질문처럼 보인다? 기본 클래스보다 인터페이스를 사용하면 어떤 이점이 있습니까? – Oded
이들은 독점하지 않습니다. IUserControl은 DoSomething()을 선언 할 수 있으며 IUserControl을 구현하여 BaseControl을 구현할 수 있습니다 (공장에서 IUserControl을 반환). – Joe