说我有以下层次结构:
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中的实现?
如果不可能的话,为什么会被开悟是很好的。
答案 0 :(得分:7)
如果您试图覆盖MyClass
中定义的方法版本,则答案是您不能。 MySubClass
中的定义隐藏了您的实现,并且您无法进一步覆盖它。
答案 1 :(得分:1)
如果您将隐藏方法标记为虚拟方法,则可以覆盖隐藏方法:
public new virtual void Method()
答案 2 :(得分:0)
是。您可以使用“new”关键字重新引入所需的任何方法。从那时起,每次调用“newed”方法都将针对新的实现。
在这种情况下,只要相关对象的类型为Method()
MyClass
的{{1}}的任何调用都将使用MySubSubClass
实施
答案 3 :(得分:0)
new
,因为您需要正确virtual
处理。您要解决此问题的唯一方法是删除public new
版Method()
并将其命名为其他内容。 new
完全隐藏了祖先对象中可能存在的重新声明的任何版本的方法。