从基类调用重写方法

时间:2013-11-19 12:35:18

标签: c# inheritance

有没有办法从基类调用overriden方法?

class SpaceObject {
  public draw() {}
}
class Sun : SpaceObject{
  public draw() {}
}

Sun planet1 = new Sun();
SpaceObject planet2 = new SpaceObject();
SpaceObject planet3 = new SpaceObject();

List<SpaceObject> objs = new List<SpaceObject>();
objs.Add(planet1);
objs.Add(planet2);
objs.Add(planet3);

foreach(SpaceObject o in objs)
  o.draw();

有没有办法在forec for planet1中调用Sun::Draw()代替SpaceObject::Draw()

现在我有这样的方式

foreach(SpaceObject o in objs)
  if(o.GetType() == typeof(Sun) ((Sun)o).draw();
  else o.draw();

但我计划拥有SpaceObject的多个遗产,所以这不是一个好方法。

2 个答案:

答案 0 :(得分:5)

制作SpaceObject.Draw()方法virtual,这样您就可以使用Sun override Draw()方法。有关详细信息,您可能需要查看This link on the Microsoft pages以了解有关继承主题的更多信息。

答案 1 :(得分:3)

以这种方式更改您的SpaceObjectSun课程

    class SpaceObject
    {
        public virtual void draw()
        {
            Console.WriteLine("Log from parent");
        }
    }

    class Sun : SpaceObject
    {
        public override void draw()
        {
            Console.WriteLine("Log from Child");
        }
    }

并且您不需要if检查和输入类型。只需致电

o.draw();