在C#中,类A
包含公共方法Foo()
,它执行一些处理并返回一个值。 protected
方法Bar()
,也在类A
执行与Foo()
相同的逻辑,然后进行一些额外的处理,然后返回一个值。调用基本方法而不是覆盖
为避免重复代码,Bar()
调用Foo()
并将返回值用作中间值。从A
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
继承并重写Foo()
。覆盖调用基类实现Bar()
。
class B : A
{
public override String Foo()
{
base.Bar();
}
}
这(当然)进入一个无限循环,直到计算机内存不足,然后产生堆栈溢出异常。
最明显的解决方案是用包含Foo胆量的私人FooInternals
方法重写A.然后修改Foo和Bar以使用该方法的结果。
有没有办法迫使A的Bar()
调用A的Foo()
而不是覆盖?
(我几乎可以肯定是太聪明在这里,这正好完全针对多态,但我无法抗拒的冲动,尝试推动我所知远一点。)
谢谢,我认为这是最好的/明显的方法。只是想知道我是否可能错过了另一种选择。 – ThatBlairGuy 2013-05-14 17:00:39
@ThatBlairGuy:对不起,我设法错过了描述这个问题的答案。哎呀:)但不,这就是你可以做的一切。 – 2013-05-14 17:02:42
不用担心,谢谢你验证我没有看到什么。 – ThatBlairGuy 2013-05-14 17:15:13