2011-02-16 48 views
1

我试图避免重复的代码块 - 每个代码块都处理父项的不同子项。下面是我想什么,以避免一个例子:选择子类的父方法(C#)

if (FormNumber == 0) 
    { 
    Child1 obj = new Child1() 
    statements; 
    } 
else 
    { 
    Child2 obj = new Child2() 
    statements; 
    } 

我想FormNumber传递给父类,并使用父函数来确定哪些子类使用。我想象像父功能:

public Parent GetChild(int F) 
    { 
     if (FormNumber == 0) 
      return new Child1(); 
     else 
      return new Child2(); 
    } 

,然后在主函数

Parent obj = new Parent(); 
Child? newobj = obj.GetChild(FormNumber); 
statements; 

问题是我需要弄清楚如何在填?与正确的儿童类。

回答

1

您需要设置Child的激光等级。如果您为Child1和CHILD2一个通用的接口,那么你可以做到以下几点:

Parent obj = new Parent(); 
IChild newobj = obj.GetChild(FormNumber); 
// newobj may be a Child1 or Vhild2 object. 

的hiearrchy可能看起来像:

public interface IChild { 
    public methods(); 
} 

public class Child1 : IChild {} 

public class Child2 : IChild {} 

你的方法可能会再看看这样的:

public IChild GetChild(int F) 
{ 
    if (FormNumber == 0) 
     return new Child1(); 
    else 
     return new Child2(); 
} 
+0

,而不是创建一个接口,用于儿童实施,为什么不创建父的抽象方法对儿童实施的? – Bengie 2011-02-16 16:39:39

3

您正在寻找factory/strategy的模式。让他们实现一个类似的界面,让它:

IChild newobj = obj.GetChild(FormNumber);