如何在调用基本方法时避免中间覆盖
在处理多个级别的类层次结构时,可能会遇到您想要的情况从重写方法调用基方法,但您不想调用中间类的实现。本文将探讨如何在 C# 中实现此目的。
在提供的代码片段中,您有一个带有虚拟方法 Say() 的基类。派生类重写此方法,而 SpecialDerived 进一步重写它。当为 SpecialDerived 的实例调用 sd.Say() 时,您会注意到不仅调用了您自己的实现,而且还调用了 Derived 的实现。
为了防止调用 Derived 的实现,您不能使用 base.base。说()。相反,您有两个选择:
选项 1:将常用实现移至受保护的虚拟方法
如果您有应由多个派生共享的常用实现类,将它们移动到基类中受保护的虚拟方法。这允许其他类仅重写它们需要的实现,从而避免调用中间类的实现。
例如,您可以引入受保护的虚拟方法 CustomSay(),而不是 Derived 重写 Say():
选项 2:直接函数指针调用(不安全Approach)
作为替代方案,您可以使用不安全代码块直接调用基类方法的函数指针。不推荐这种方法,因为它被认为是不安全的,并且可能导致潜在的错误。
以上是C# 重写时如何防止中间类方法调用?的详细内容。更多信息请关注PHP中文网其他相关文章!