有没有办法从基类调用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页面上的此链接,以了解有关继承主题的更多信息。
以这种方式更改SpaceObject
和Sun
类
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();