現在、私はすべて類似しているメソッドをたくさん持っています。sのリストからParent
、オブジェクトを適切なタイプにキャストしてから、それをDraw
実行します。これは問題なく機能しますが、キャスト以外の各方法はまったく同じであるため、非常に扱いにくいです。
こんな感じ
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
共通しているのが親だけである場合、リスト内のすべての要素をエレガントに呼び出すにはどうすればよいですか?