隐式和显式方法隐藏

时间:2013-11-02 10:49:20

标签: 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;
    }
}

这确实使用Sum关键字隐藏了new方法。

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方法?

2 个答案:

答案 0 :(得分:3)

来自MSDN documentation

  

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

以下解释了两个代码片段相同的原因:

  

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

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

Knowing When to Use Override and New Keywords (C# Programming Guide)中的MSDN上也可以找到更多解释。

答案 1 :(得分:2)

是的。没有语义差异。新关键字仅强调隐藏。它类似于private修饰符的行为。默认情况下,成员是私有的,但无论如何你都可以写private