目前我有很多相似的方法:从一个Parent
s 列表中,我将一个对象转换为它的正确类型,然后Draw
ing 它。这很好用,但是非常笨拙,因为除了演员表之外,每种方法都完全相同。
它看起来像这样
public class Parent
{
public virtual void Draw()
{
//deliberately nothing
}
}
public class Child1 : Parent
{
public override void Draw()
{
//draw this object, but slightly different method than Parent
}
}
public class Child2 : Parent
{
public override void Draw()
{
//draw this, but slightly different method than Child1 and Parent
}
}
/////////////////////////
List<Parent> parent_list = new List<Parent>();
parent_list.Add(new Child1());
parent_list.Add(new Child2());
/////////////////////////
foreach (Parent parent in parent_list)
{
parent.Draw(); //Would like to use child1 and child2's draw
}
/////////////////////////
///instead I'm doing a manual cast for each child class
foreach (Parent parent in parent_list)
{
Child1 child = (Child1)parent;
child.Draw();
}
foreach (Parent parent in parent_list)
{
Child2 child = (Child2)parent;
child.Draw();
}
我遇到的问题是它试图Parent.Draw()
在我想调用它时调用Child.Draw()
我很肯定有更好的方法来设计代码,但我无法弄清楚。
Draw
当唯一的共同点是它们的父级时,我如何优雅地调用列表中的所有元素?