c# - Refactoring a concrete method in abstract class which contains an abstract method -
considering below code,
abstract class abstractclass { public abstract void abstractmethoda(); public void concretemethoda() { //some operation concretemethodb(); } } public void concretemethodb() { //huge code unrelated class abstractmethoda(); } } class derivedclass : abstractclass { public void abstractmethoda() { //some operation } }
now wish move concretemethodb() separate class , make call method concretemethoda() in abstract class. since concretemethodb() uses abstract method abstractmethoda() implemented in derivedclass, unable access method abstractmethoda() new class? idea on how resolve this?
why don't make this
static class helper { public static void concretemethodb(abstractclass caller) { //huge code unrelated class caller.abstractmethoda(); } }
and in abstractclass
abstract class abstractclass { public abstract void abstractmethoda(); public void concretemethoda() { //some operation helper.concretemethodb(this); } }
edit including interface based decoupling suggestion david arno:
static class helper { public static void concretemethodb(iabstractclass caller) { //huge code unrelated class caller.abstractmethoda(); } } interface iabstractclass { void abstractmethoda(); }
and in abstractclass
abstract class abstractclass { public abstract void abstractmethoda(); public void concretemethoda() { //some operation helper.concretemethodb(this); } }
that gives better layers isolation. of course solution suggested david in post mentioning usage of "action" , passing method argument worth consideration.
Comments
Post a Comment