重构代码时,出现了一个不寻常的方法签名:
private static new MyObject CreateSomething() { return new MyObject{"Something New"}; }
问题: 这个方法签名中的 new 关键字有何意义?这是C# 3.0中引入的功能吗?它与 override 有什么不同?
答案:
方法签名中的 new 关键字与 override 有不同的用途。根据 Microsoft 的 MSDN 文档,它允许隐藏继承的成员。
说明差异的示例:
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
在此示例中,在 One 方法上使用 override 来覆盖其在基类 A。另一方面,在 Two 方法上使用 new 来隐藏 A 的继承实现。
Key区别:
override 修改虚拟或抽象方法以在派生类中提供不同的实现。相比之下,new 隐藏了继承的成员,包括虚拟的和非虚拟的,允许在派生类中提供新的实现。
以上是C# 方法签名中的'new”关键字意味着什么?的详细内容。更多信息请关注PHP中文网其他相关文章!