将“new”替换为“override”关键字的区别

时间:2014-02-05 09:55:38

标签: c# override

请找到以下代码:

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()

1 个答案:

答案 0 :(得分:0)

以下页面很好地总结了您的问题。

Knowing When to Use Override and New Keywords

<强>摘要

覆盖:在派生类中重写基类的方法时,使用派生类中的版本,即使调用代码没有“知道”该对象是派生类的一个实例。

:如果使用new关键字而不是override,派生类中的方法不会覆盖基类中的方法,它只会隐藏它。

如果未指定new或覆盖,则结果输出与指定new相同,但您也会收到编译器警告(因为您可能不知道您正在隐藏方法基类方法,或者你可能想要覆盖它,只是忘了包含关键字)。

覆盖:与基类中的virtual / abstract / override类型的方法一起使用

:当基类未将方法声明为virtual / abstract / override

New Vs Override