Есть ли способ вызвать метод 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();
Есть ли способ, чтобы в Еогеаспе для planet1 будет звонить на Sun::Draw()
вместо SpaceObject::Draw()
?
Сейчас у меня есть это так
foreach(SpaceObject o in objs)
if(o.GetType() == typeof(Sun) ((Sun)o).draw();
else o.draw();
Но я планирую иметь несколько наследств из SpaceObject
, так что это не лучший способ пойти.
Виртуальное ключевое слово? Edit: ok, в C++ вы можете использовать ключевое слово virtual перед объявлением вашего метода, чтобы обозначить, что вы должны подниматься так высоко, как можете в иерархии, когда сталкиваетесь с коллекциями полиморфных вещей. Я знаю, что это C#, но, возможно, это то же самое? Попробуйте «виртуальную виртуальную ничью» для каждого из них. –
@ TheMarlboroMan C# также виртуальный только виртуальный .. обязательно. –
@Buksy: 'SpaceObject' будет иметь' virtual public void draw() 'и' Sun' будет иметь 'public override void draw()'. Это элементарный ООП, вы должны прекратить кодирование и сначала прочитать немного, чтобы не застревать каждые 5 минут. – Jon