有没有办法从基类调用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
的多个遗产,所以这不是一个好方法。
答案 0 :(得分:5)
制作SpaceObject.Draw()
方法virtual
,这样您就可以使用Sun
override Draw()
方法。有关详细信息,您可能需要查看This link on the Microsoft pages以了解有关继承主题的更多信息。
答案 1 :(得分:3)
以这种方式更改您的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();