c# - Call base method instead of override -
in c#, class a contains public method foo() processing , returns value.  protected method bar(), in class a performs same logic foo(), followed additional processing, , returns value.
in order avoid duplicating code, bar() calls foo() , uses return intermediate value.
class {   public virtual string foo()   {      string computedvalue;      // compute value.      return computedvalue;   }    protected string bar()   {      string computedvalue;      string intermediatevalue = foo();      /// more processing create computedvalue intermediatevalue.      return computedvalue;   } } class b inherits a , overrides foo().  override calls base class implementation of bar().
class b : {    public override string foo()    {      base.bar();    } } this (of course) goes infinite loop until computer runs out of memory , yields stack overflow exception.
the obvious solution rewrite private foointernals method contains guts of foo.  foo , bar modified use results of method.
is there way force a's bar() call a's foo() instead of override?
(i'm being way clever here; goes against polymorphism. can't resist urge try pushing knowledge bit further.)
is there way force a's bar() call a's foo() instead of override?
not directly. simplest refactoring change foo to:
public virtual string foo() {     return fooimpl(); }  private string fooimpl() {     string computedvalue;     // compute value.     return computedvalue; } then change bar call fooimpl instead of foo.
(this meant in "most obvious solution" paragraph - missed on first reading, i'm afraid.)
fundamentally 1 of areas inheritance problematic. when 1 virtual method calls one, needs documented subclasses can avoid causing problems - though feels should implementation detail. it's sort of thing makes me prefer composition on inheritance - both reasonable options, of course.
Comments
Post a Comment