我正在努力理解C#中重写(override)和虚拟(virtual)的必要性,因此我编写了以下代码:
using System;
namespace Override
{
class Base
{
public virtual void method()
{
Console.WriteLine("Base method");
}
}
class Derived : Base
{
public override void method()
{
Console.WriteLine("Derived method");
}
}
class Program
{
static void Main(string[] args)
{
Derived d = new Derived();
d.method();
}
}
}
我原本期望"派生方法"会被调用并打印输出。然后我编写了以下代码,未使用virtual/override组合。
using System;
namespace Override
{
class Base
{
public void method()
{
Console.WriteLine("Base method");
}
}
class Derived : Base
{
public void method()
{
Console.WriteLine("Derived method");
}
}
class Program
{
static void Main(string[] args)
{
Derived d = new Derived();
d.method();
}
}
}
我得到了相同的结果,即“派生方法”被调用并打印。我的问题是,如果代码在没有虚拟/覆盖的情况下按照我的预期工作,那么它们的需要是什么?或者我在这里错过了什么?