C# 选择子类(C)的父方法

C# 选择子类(C)的父方法,c#,inheritance,C#,Inheritance,我试图避免重复的代码块,每个代码块处理的是父对象的不同子对象。以下是我想避免的一个例子: if (FormNumber == 0) { Child1 obj = new Child1() statements; } else { Child2 obj = new Child2() statements; } 我想将FormNumber传递给父类,并使用父函数确定使用哪个子类。我想象一个父函数,比如: public

我试图避免重复的代码块,每个代码块处理的是父对象的不同子对象。以下是我想避免的一个例子:

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;

问题是我需要弄清楚如何填写?使用正确的子类。

您需要为子类设置继承层次结构。如果为Child1和Child2设置了公共接口,则可以执行以下操作:

Parent obj = new Parent();  
IChild newobj = obj.GetChild(FormNumber); 
// newobj may be a Child1 or Vhild2 object.
这个层次可能看起来像:

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();
} 
然后,您的方法可以如下所示:

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();
} 

您需要为Child设置继承层次结构。如果为Child1和Child2设置了公共接口,则可以执行以下操作:

Parent obj = new Parent();  
IChild newobj = obj.GetChild(FormNumber); 
// newobj may be a Child1 or Vhild2 object.
这个层次可能看起来像:

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();
} 
然后,您的方法可以如下所示:

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();
} 
你正在寻找一种新的模式。让他们实现一个类似的接口,并让它:

IChild newobj = obj.GetChild(FormNumber);  
你正在寻找一种新的模式。让他们实现一个类似的接口,并让它:

IChild newobj = obj.GetChild(FormNumber);  

与其创建一个接口让子对象实现,为什么不在父对象中创建一个抽象方法让子对象实现呢?子对象有不同数量的参数,所以我认为接口在这里不起作用。我想我需要一个抽象类。我一直在研究抽象工厂方法,但对于一个简单的选择函数来说,它似乎相当复杂。@this,我不确定您当时是否正确使用了继承。我不知道你上面的评论是什么意思。孩子们需要从父母那里继承一些值,并且取决于它是哪个孩子来决定其他值的设置方式。如果我使用一个接口,看起来在子类实现中会有重复的代码块,并且我必须显式地设置属性。我是个新手,所以我可能错过了什么。是否有方法从父类传递值并使用接口选择函数,以便在子类中设置属性?@这是,好的。我想您可能需要为两个子类的父类创建一个抽象类。看看这里:与其创建一个接口让孩子实现,为什么不在父对象中创建一个抽象方法让孩子实现呢?孩子们有不同数量的参数,所以我认为接口在这里不起作用。我想我需要一个抽象类。我一直在研究抽象工厂方法,但对于一个简单的选择函数来说,它似乎相当复杂。@this,我不确定您当时是否正确使用了继承。我不知道你上面的评论是什么意思。孩子们需要从父母那里继承一些值,并且取决于它是哪个孩子来决定其他值的设置方式。如果我使用一个接口,看起来在子类实现中会有重复的代码块,并且我必须显式地设置属性。我是个新手,所以我可能错过了什么。是否有方法从父类传递值并使用接口选择函数,以便在子类中设置属性?@这是,好的。我想您可能需要为两个子类的父类创建一个抽象类。请看这里: