在执行重构时,我最终创建了一个类似于以下示例的方法。为了简单起见,已更改数据类型。
我以前有这样的作业说明:
MyObject myVar = new MyObject();
偶然地将其重构为:
private static new MyObject CreateSomething() { return new MyObject{"Something New"}; }
这是我剪切/粘贴错误的结果,但是new关键字in private static new有效且可以编译。
new
private static new
问题 :new关键字在方法签名中表示什么?我认为这是C#3.0中引入的?
这override有何不同?
override
来自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”关键字来允许您“覆盖”非虚拟和静态方法。