c# - 方法签名中的新关键字

标签 c# methods keyword

在执行重构时,我最终创建了一个如下例所示的方法。为简单起见,数据类型已更改。

我以前有这样的赋值语句:

MyObject myVar = new MyObject();

不小心重构成了这样:

private static new MyObject CreateSomething()
{
  return new MyObject{"Something New"};
}

这是我的剪切/粘贴错误的结果,但是 private static new 中的 new 关键字是有效的并且可以编译。

问题:new 关键字在方法签名中表示什么?我假设这是 C# 3.0 中引入的东西?

这与 override 有何不同?

最佳答案

来自 MSDN 的新关键字引用:

MSDN Reference

这是我在网上从 Microsoft MVP 中找到的一个非常有意义的示例: Link to Original

public class A
{
   public virtual void One();
   public void Two();
}

public class B : A
{
   public override void One();
   public new void Two();
}

B b = new B();
A a = b as A;

a.One(); // Calls implementation in B
a.Two(); // Calls implementation in A
b.One(); // Calls implementation in B
b.Two(); // Calls implementation in B

Override 只能在非常特殊的情况下使用。来自 MSDN:

You cannot override a non-virtual or static method. The overridden base method must be virtual, abstract, or override.

因此需要“new”关键字来允许您“覆盖”非虚拟和静态方法。

关于c# - 方法签名中的新关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014295/

相关文章:

python - 在不自定义编译器的情况下向 Python 添加新语句

c++ - __Garbage__ 是 C++ 宏中的关键字吗?

c# - Visual Studio 2012 无法识别现有的单元测试

c# - 如何为 var 输入制作不区分大小写的字典 - C#

c# - 等待 2 个线程中的 1 个完成

java - 返回外部方法错误

java - 在线程中使用同步

c# - NHibernate session 管理建议

javascript - 访问 Javascript promise 链中的变量

java - 在 main 之外的方法中使用 print 语句是否更有效,或者它是否重要?