所以我最近在工作中遇到了这个C#语句:
public new string SomeFunction(int i)
{
return base.SomeFunction(i);
}
Run Code Online (Sandbox Code Playgroud)
我在网上搜索,但我想我可以在这里找到更好的答案.
现在,我猜这一切都是返回一个新字符串,其值与调用返回的字符串相同base.SomeFunction(i)...这是正确的吗?
此外,此功能是否存在于其他语言(特定于Java)?
编辑:
在我的具体情况下,base.SomeFunction受保护,而不是虚拟......这有什么不同?谢谢
不,这意味着它隐藏 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)
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |