从基类调用overriden方法



有没有办法从基类调用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();

有没有办法在foreach中为planet1调用Sun::Draw()而不是SpaceObject::Draw()

现在我用这种方式

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

但我计划对SpaceObject进行多重继承,所以这不是一个好的方法。

SpaceObject.Draw()方法设为virtual,这样就可以为Sun提供override Draw()方法。有关详细信息,您可能希望查看Microsoft页面上的此链接,以了解有关继承主题的更多信息。

以这种方式更改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();

最新更新