是否可以覆盖隐藏方法?

时间:2009-12-04 00:59:41

标签: c# oop inheritance override

说我有以下层次结构:

public class MyClass
{
  protected virtual void Method() { ... }
}

public class MySubClass : MyClass
{
  public new virtual void Method() { ... }
}

public class MySubSubClass : MySubClass
{
  // how do I reference the protected Method() to override it?
}

是否可以覆盖protected Method()的实现,以便将MyClass中定义的其他方法的调用分派给MySubSubClass中的实现?

如果不可能的话,为什么会被开悟是很好的。

4 个答案:

答案 0 :(得分:7)

如果您试图覆盖MyClass中定义的方法版本,则答案是您不能。 MySubClass中的定义隐藏了您的实现,并且您无法进一步覆盖它。

答案 1 :(得分:1)

如果您将隐藏方法标记为虚拟方法,则可以覆盖隐藏方法:

public new virtual void Method()

答案 2 :(得分:0)

是。您可以使用“new”关键字重新引入所需的任何方法。从那时起,每次调用“newed”方法都将针对新的实现。

在这种情况下,只要相关对象的类型为Method()

,对来自MyClass的{​​{1}}的任何调用都将使用MySubSubClass实施

答案 3 :(得分:0)

正如@Jared所说,你做不到。我只能假设您要避免再次使用new,因为您需要正确virtual处理。您要解决此问题的唯一方法是删除public newMethod()并将其命名为其他内容。 new完全隐藏了祖先对象中可能存在的重新声明的任何版本的方法。