0

考虑下面的代码片段:

  class BaseClass
{
    public void SayHi()
    {
        Console.WriteLine("Hi from base class");
    }

    public virtual void SayHello()
    {
        Console.WriteLine("Hello from base class");
    }
}

class DerivedClass : BaseClass
{
    public void SayHi()
    {
        Console.WriteLine("Hi from derived class");
    }

    public new void SayHello()
    {
        Console.WriteLine("Hello from derived class");
    }
}

 class Program
{
    static void Main(string[] args)
    {
        BaseClass _object = new DerivedClass();

        _object.SayHi();
        _object.SayHello();

        Console.ReadKey();
    }
}

上面的输出显示:

Hi from base class 
Hi from derived class

谁能解释一下这背后的原因。另外,如果我们在派生类中创建同名方法,是否不需要重写基类的虚方法?

4

1 回答 1

0

多态性的全部意义在于类型的对象BaseClass可以设置为Derived类的实例,但具有不同的行为[语义]。如果不是这种情况,那么您将永远无法将新的派生 Form 实例插入到Winforms框架中。

OP,你的定义是错误的。虚拟方法是为了启用多态性。关键字的使用new也是错误的,应该是overridevirtual方法定义新的行为。

您的基类中的虚拟方法可以在您的基类中被覆盖,这样即使您的变量类型是BaseClass,您覆盖的虚拟方法也会在该变量上被调用。

于 2013-01-20T15:39:24.743 回答