从基类调用overriden方法

Buk*_*ksy 0 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();
Run Code Online (Sandbox Code Playgroud)

是否有一种方法可以在foreach中为planet1 Sun::Draw()而不是SpaceObject::Draw()?

现在我就是这样的

foreach(SpaceObject o in objs)
  if(o.GetType() == typeof(Sun) ((Sun)o).draw();
  else o.draw();
Run Code Online (Sandbox Code Playgroud)

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

Voi*_*paw 5

制作SpaceObject.Draw()方法virtual,这样你就可以给出Sun一个override Draw()方法.有关详细信息,您可能需要查看Microsoft页面上的此链接以了解有关继承主题的更多信息.