Kev*_*ith 7 c# architecture new-operator
可能重复:
C# - 方法签名中的新关键字
假设我有3个班:GrandDad,爸爸,儿子.儿子继承自祖父,继承自祖父.
每个类都实现了foo.
// GrandDad class:
public virtual void foo()
// Dad class:
new public virtual void foo()
// Son class:
public override void foo()
Run Code Online (Sandbox Code Playgroud)
我不明白为什么爸爸会使用新关键字的原因.据我所知,使用新隐藏方法.你为什么想做这个?
我阅读了新的MSDN解释,但讨论只是机械的,而不是架构的.
谢谢
希望下面的示例能给您提供 new 关键字的想法。这实际上取决于功能的要求。
public class Base
{
public virtual void SomeMethod()
{
}
}
public class Derived : Base
{
public override void SomeMethod()
{
}
}
...
Base b = new Derived();
b.SomeMethod();
Run Code Online (Sandbox Code Playgroud)
如果覆盖 Base.SomeMethod,最终将调用 Derived.SomeMethod。
现在,如果您使用new关键字而不是override,则派生类中的方法不会重写基类中的方法,而只是隐藏它。在这种情况下,代码如下:
public class Base
{
public virtual void SomeOtherMethod()
{
}
}
public class Derived : Base
{
public new void SomeOtherMethod()
{
}
}
...
Base b = new Derived();
Derived d = new Derived();
b.SomeOtherMethod();
d.SomeOtherMethod();
Run Code Online (Sandbox Code Playgroud)
将首先调用 Base.SomeOtherMethod ,然后调用 Derived.SomeOtherMethod 。它们实际上是两个完全独立的方法,恰好具有相同的名称,而不是派生方法重写基本方法。