请找到以下代码:
using System;
namespace MainNS
{
abstract class BaseClass
{
abstract public void fun();
}
class DerivedClass1 : BaseClass
{
override public void fun()
{
Console.WriteLine("fun() of DerivedClass1 invoked!");
}
}
class DerivedClass2 : DerivedClass1
{
new public void fun()
{
Console.WriteLine("fun() of DerivedClass2 invoked!");
}
}
class MainClass
{
public static void Main(string[] args)
{
DerivedClass1 d1 = new DerivedClass2();
d1.fun();
Console.ReadKey();
}
}
}
在这里用new
替换override
有什么用,请解释一下这背后的实际概念。
Override
关键字使[{1}} fun()
的{{1}}被执行,DerivedClass2
关键字使new
的{{1}}被执行。
fun()
答案 0 :(得分:0)
以下页面很好地总结了您的问题。
Knowing When to Use Override and New Keywords
<强>摘要强>
覆盖:在派生类中重写基类的方法时,使用派生类中的版本,即使调用代码没有“知道”该对象是派生类的一个实例。
新:如果使用new关键字而不是override,派生类中的方法不会覆盖基类中的方法,它只会隐藏它。
如果未指定new或覆盖,则结果输出与指定new相同,但您也会收到编译器警告(因为您可能不知道您正在隐藏方法基类方法,或者你可能想要覆盖它,只是忘了包含关键字)。
覆盖:与基类中的virtual / abstract / override类型的方法一起使用
新:当基类未将方法声明为virtual / abstract / override
时