在返回类型的C#方法定义前添加"new"?

Pol*_*878 3 .net c# methods

所以我最近在工作中遇到了这个C#语句:

public new string SomeFunction(int i)
{
     return base.SomeFunction(i);
}
Run Code Online (Sandbox Code Playgroud)

我在网上搜索,但我想我可以在这里找到更好的答案.

现在,我猜这一切都是返回一个新字符串,其值与调用返回的字符串相同base.SomeFunction(i)...这是正确的吗?

此外,此功能是否存在于其他语言(特定于Java)?

编辑:
在我的具体情况下,base.SomeFunction受保护,而不是虚拟......这有什么不同?谢谢

Jon*_*eet 9

不,这意味着它隐藏 SomeFunction在基类中而不是覆盖它.如果基类中没有一个具有相同签名的方法,则会出现编译时错误(因为你试图隐藏那些不存在的东西!)

有关更多信息,请参阅此问题.(我不认为这是一个重复的问题,因为它是关于"新"的内容,而不仅仅是在缺席时谈论警告.)

我在这个问题的答案中重复的例子,只是为了保存点击...

以下是隐藏方法和覆盖方法之间区别的示例:

using System;

class Base
{
    public virtual void OverrideMe()
    {
        Console.WriteLine("Base.OverrideMe");
    }

    public virtual void HideMe()
    {
        Console.WriteLine("Base.HideMe");
    }
}

class Derived : Base
{
    public override void OverrideMe()
    {
        Console.WriteLine("Derived.OverrideMe");
    }

    public new void HideMe()
    {
        Console.WriteLine("Derived.HideMe");
    }
}

class Test
{
    static void Main()
    {
        Base x = new Derived();
        x.OverrideMe();
        x.HideMe();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Derived.OverrideMe
Base.HideMe
Run Code Online (Sandbox Code Playgroud)