繁体   English   中英

是否可以覆盖隐藏方法?

[英]Is is possible to override a hidden method?

说我有以下层次结构:

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中的实现?

如果不可能的话,请告诉我们为什么。

如果您尝试覆盖MyClass定义的Method版本,那么答案是您不能。 MySubClass的定义对MySubClass隐藏了此实现,您无法进一步覆盖它。

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

public new virtual void Method()

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

在这种情况下,只要有问题的对象是MySubSubClass类型,对MyClass Method()任何调用都将使用MySubSubClass实现。

正如@Jared所说,您不能。 我只能假设您要避免再次使用new ,因为您需要适当的virtual处理。 您要解决此问题的唯一方法是,摆脱Method()public new版本并将其命名为其他名称。 new完全隐藏了您要重新声明的方法的所有版本,该版本可能存在于祖先对象中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM