4

我有以下两个用例:

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

4

2 回答 2

3

MSDN 文档

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

下面解释为什么这两个代码段相同:

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

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

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

于 2013-11-02T10:56:47.390 回答
2

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

于 2013-11-02T10:51:59.600 回答