在执行重构时,我最终创建了一个如下例所示的方法。为简单起见,数据类型已更改。
我以前有这样的赋值语句:
MyObject myVar = new MyObject();
不小心重构成了这样:
private static new MyObject CreateSomething()
{
return new MyObject{"Something New"};
}
这是我的剪切/粘贴错误的结果,但是 private static new
中的 new
关键字是有效的并且可以编译。
问题:new
关键字在方法签名中表示什么?我假设这是 C# 3.0 中引入的东西?
这与 override
有何不同?
最佳答案
来自 MSDN 的新关键字引用:
这是我在网上从 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/