"new"关键字在C#中有什么影响?为什么它在没有使用时只是一个警告?

jos*_*ley 8 c# warnings keyword new-operator

请考虑以下代码:

public abstract class Test1
{
    public object Data { get; set; }
}

public abstract class Test2<T> : Test1
{
    public T Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这将产生以下警告:

'Test2.Data'隐藏了继承的成员'Test1.Data'.如果要隐藏,请使用new关键字.

为什么这只是一个警告,添加"new"关键字会产生什么影响?

根据我的测试,一旦添加"new"关键字,我就找不到任何差异.

不要误会我的意思,我只是为了明确,但我很好奇添加"新"的好处.

我对它可能是什么的唯一想法是:

  • 提高了人类的可读性
  • 一些在运行时保存,当编译器没有留下来解决不可避免的长期问题

sep*_*p2k 21

new关键字的唯一效果是删除警告.不使用new关键字时获取警告的目的是为了防止您在真正意图覆盖它时意外地隐藏方法.