我知道这个问题已经问过很多遍了,但我仍然找不到直接的答案。如果我可以在没有那些关键字的情况下更改派生方法,为什么要在派生类中使用带有virtual关键字的方法,然后再使用override关键字?
class Program
{
static void Main(string[] args)
{
Furniture furn = new Furniture();
furn.SayWhoYouAre();
Table tab = new Table();
tab.SayWhoYouAre();
Console.ReadKey();
}
}
public class Furniture
{
public Furniture()
{
}
public void SayWhoYouAre()
{
Console.WriteLine("I'm Furniture");
}
}
public class Table: Furniture
{
public Table()
{
}
public void SayWhoYouAre()
{
Console.WriteLine("I'm Table");
}
}
上面的代码写到屏幕上:
I'm Furniture
I'm Table
很显然,表对象是桌子和家具(因此发生了多态性,并且SayWhoYouAre()
方法在派生类中被覆盖。
假设您具有以下情况。当我在桌子上时,您将获得输出。如果您使用带有方法的override关键字。否则,它将始终调用Base类方法并给出输出I'Furniture。它称为运行时多态。
Furniture furn = new Table();
furn.SayWhoYouAre();
注意:如果不声明基类方法override
,则不能在派生类中使用virtual