C# 隐式和显式方法隐藏

C# 隐式和显式方法隐藏,c#,method-hiding,C#,Method Hiding,我有以下两个用例: class BaseCalculator { public int Sum(int x, int y) { return x + y; } } class Calculator : BaseCalculator { public new int Sum ( int x , int y ) { return x + y; } } 这确实使用new关键字显式隐藏了Sum方法 class Ba

我有以下两个用例:

class BaseCalculator
{
    public int Sum(int x, int y)
    {
        return x + y;
    }   
}

class Calculator : BaseCalculator
{
    public new int Sum ( int x , int y )
    {
        return x + y;
    }
}
这确实使用
new
关键字显式隐藏了
Sum
方法

class BaseCalculator
{
    public int Sum(int x, int y)
    {
        return x + y;
    }
}

class Calculator : BaseCalculator
{
    public int Sum ( int x , int y )
    {
        return x + y;
    }
}

我不明白两者之间的区别。第二个代码是否隐式隐藏了Sum方法?

是的。没有语义上的区别。新的关键字只强调隐藏。它类似于
private
修饰符的行为。默认情况下,成员是私有的,但您仍然可以编写
private

来自:

在C#中,派生类可以包含与基类方法同名的方法。如果派生类中的方法前面有new关键字,则该方法被定义为独立于基类中的方法

下面解释两个代码段相同的原因:

使用new关键字告诉编译器您的定义隐藏了基类中包含的定义。这是默认行为

唯一的区别是,通过使用
new
关键字,可以避免编译器警告


更多解释也可以在MSDN中找到。

是的,它隐式隐藏了基类的Sum方法。这也是非常糟糕的(我认为会产生警告?)-在这种情况下,始终使用new或override。这将清楚地表明您的意图,并且您并没有忘记它。区别在于编译器输出窗口中,使用
new
时少了1条警告。