所以显然你不能将virtual
修饰符与修饰符一起使用override
。
virtual
- 一种可以被覆盖的方法
override
- 覆盖其父类中同名方法的方法
这让我相信,如果我在子类中重写了一个方法,如果那个孩子有一个孩子,你就不能再重写那个方法了。
可以肯定地说,如果你在方法声明中放入override
and ,你会在 C# 中得到一个编译错误。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
and的上下文override
?