一尘不染

方法签名中的新关键字

c#

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

我以前有这样的作业说明:

MyObject myVar = new MyObject();

偶然地将其重构为:

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

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

问题new关键字在方法签名中表示什么?我认为这是C#3.0中引入的?

override有何不同?


阅读 278

收藏
2020-05-19

共1个答案

一尘不染

来自MSDN的新关键字参考:

MSDN参考

这是我在网上从Microsoft MVP中找到的一个很好的例子:
链接到原始

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

替代只能在非常特殊的情况下使用。从MSDN:

您不能覆盖非虚拟或静态方法。覆盖的基本方法必须是虚拟的,抽象的或覆盖的。

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

2020-05-19