一尘不染

C#-关键字用法virtual + override vs.new

c#

在声明基本类型的匹配方法与在子类型中声明匹配方法时,简单地使用virtualoverride”关键字而不是简单地使用“
new”关键字在子类型中声明基本方法“ ” 之间的区别是什么?


阅读 258

收藏
2020-05-19

共1个答案

一尘不染

“ new”关键字不会被覆盖,它表示与基类方法无关的新方法。

public class Foo
{
     public bool DoSomething() { return false; }
}

public class Bar : Foo
{
     public new bool DoSomething() { return true; }
}

public class Test
{
    public static void Main ()
    {
        Foo test = new Bar ();
        Console.WriteLine (test.DoSomething ());
    }
}

这将显示为false,如果使用了覆盖,则其将显示为true。

(摘自Joseph Daigle的基本代码)

因此,如果您正在执行真正的多态性,则应 始终覆盖 。您需要使用“ new”的唯一地方是该方法与基类版本没有任何关系。

2020-05-19