По-видимому, вы не можете использовать модификатор virtual
с модификатором override
.
virtual
- метод, который можно переопределить
override
- метод, который переопределяет метод с тем же именем в его родительском классе
Это заставляет меня думать, что если я переопределю метод в дочернем классе, если у этого ребенка есть ребенок, вы не сможете переопределить этот метод еще раз.
И можно с уверенностью сказать, что если вы введете override
и virtual
в объявление метода, вы получите ошибку компиляции в С#.
Однако я не могу понять, почему код, который я сделал ниже, работает так, как он делает
using System;
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("Drawing Object");
}
}
public class DrawDemo
{
public static int Main()
{
DrawingObject[] dObj = new DrawingObject[3];
dObj[0] = new DrawingObject();
dObj[1] = new Line();
dObj[2] = new LittleLine();
foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}
Console.Read();
return 0;
}
}
public class Line : DrawingObject
{
public override void Draw()
{// the method above me is in fact virtual because LittleLine overid it?
Console.WriteLine("I'm a Line.");
}
}
public class LittleLine : Line
{
public override void Draw()
{
Console.WriteLine("I'm a Little Line.");
}
}
Здесь вывод:
Объект рисования
Я - Линия.
Я Маленькая Линия.
Таким образом, метод draw в Line
выглядит так, как будто он был переопределен LittleLine
. Этот код на самом деле не переопределяет его, или компилятор делает какой-то другой трюк? Или я не понимаю контекст virtual
и override
?