为什么要使用`new`隐藏方法?

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解释,但讨论只是机械的,而不是架构的.

谢谢

Cha*_*thJ 0

希望下面的示例能给您提供 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 。它们实际上是两个完全独立的方法,恰好具有相同的名称,而不是派生方法重写基本方法。