【发布时间】:2023-03-08 16:06:01
【问题描述】:
假设有基类A 和派生类B。
A 类有两个函数:fun1() 和 fun2(),其中 fun1() 调用 fun2()。
B 类覆盖 fun1() 和 fun2(),fun1() 再次调用 fun2()。
但是,我想在覆盖的 fun2() 中调用 base.fun1()。由于 base.fun1() 调用 fun2() 而不是基类的版本,这会产生非常不幸的循环:
fun1() -> fun2() -> base.fun1() -> fun2() -> base.fun1() -> ...
有没有办法强制base.fun1() 调用fun2() 的基本版本?我知道真正的问题可能在于这些类的糟糕设计,但我仍然很好奇它是否可能。
【问题讨论】:
-
除了相互调用之外,这些函数还做了一些不同的事情,这些事情在这个问题中并不重要。我不是在寻求可能以许多更好的方式重写的非常具体的代码的帮助。在这个例子中,我会这样看:
fun1() -> fun2() -> base.fun1() -> base.fun2()。不幸的是,在覆盖base.fun2()之后,base.fun1()改为调用fun2()。
标签: c# class oop derived-class