为什么要使用virtual + override,如果没有这些可以更改派生方法?

问题描述 投票:-1回答:1

我知道这个问题已经问过很多遍了,但我仍然找不到直接的答案。如果我可以在没有那些关键字的情况下更改派生方法,为什么要在派生类中使用带有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()方法在派生类中被覆盖。

c# inheritance methods overriding virtual
1个回答
0
投票

假设您具有以下情况。当我在桌子上时,您将获得输出。如果您使用带有方法的override关键字。否则,它将始终调用Base类方法并给出输出I'Furniture。它称为运行时多态。

Furniture furn = new Table();        
furn.SayWhoYouAre();

注意:如果不声明基类方法override,则不能在派生类中使用virtual

© www.soinside.com 2019 - 2024. All rights reserved.