在 C# 中,类A
包含一个公共方法Foo()
,该方法进行一些处理并返回一个值。 protected
方法Bar()
,也在类中A
执行与 相同的逻辑Foo()
,然后进行一些额外的处理,然后返回一个值。
为了避免重复代码,Bar()
调用Foo()
并使用返回值作为中间值。
class A
{
public virtual String Foo()
{
String computedValue;
// Compute the value.
return computedValue;
}
protected String Bar()
{
String computedValue;
String intermediateValue = Foo();
/// More processing to create computedValue from intermediateValue.
return computedValue;
}
}
类B
继承A
并覆盖Foo()
. 覆盖调用 的基类实现Bar()
。
class B : A
{
public override String Foo()
{
base.Bar();
}
}
这(当然)进入无限循环,直到计算机内存不足,然后产生堆栈溢出异常。
最明显的解决方案是使用FooInternals
包含 Foo 内容的私有方法重写 A。然后修改 Foo 和 Bar 以使用该方法的结果。
有没有办法强制 ABar()
调用 AFoo()
而不是覆盖?
(我几乎可以肯定在这里太聪明了;这完全违背了多态性。但我无法抗拒尝试进一步推动我的知识的冲动。)