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,我不确定您当时是否正确使用了继承。我不知道你上面的评论是什么意思。孩子们需要从父母那里继承一些值,并且取决于它是哪个孩子来决定其他值的设置方式。如果我使用一个接口,看起来在子类实现中会有重复的代码块,并且我必须显式地设置属性。我是个新手,所以我可能错过了什么。是否有方法从父类传递值并使用接口选择函数,以便在子类中设置属性?@这是,好的。我想您可能需要为两个子类的父类创建一个抽象类。请看这里: