Учитывая приведенный ниже код,Рефакторинг конкретного метода в абстрактном классе, который содержит абстрактный метод
abstract class AbstractClass
{
public abstract void AbstractMethodA();
public void ConcreteMethodA()
{
//Some operation
ConcreteMethodB();
}
}
public void ConcreteMethodB()
{
//Huge code unrelated to this class
AbstractMethodA();
}
}
class DerivedClass : AbstractClass
{
public void AbstractMethodA()
{
//Some operation
}
}
Сейчас я хочу, чтобы переместить ConcreteMethodB() в отдельный класс и сделать вызов это от метода ConcreteMethodA() в абстрактном классе. Но так как ConcreteMethodB() использует абстрактный метод AbstractMethodA(), реализованный в DerivedClass, я не могу получить доступ к методу AbstractMethodA() из нового класса? Любая идея о том, как разрешить это?
Я бы считать, что один шаг дальше и иметь 'ConcreteMethodB (IAbstractClass caller) и создать интерфейс, который 'AbstractClass' реализует для уменьшения связи. –
@DavidArno уверен, я согласен. –
О, и вам нужно изменить 'public void ConcreteMethodB ...' на 'public static void ConcreteMethodB'. Я обнаружил это при проверке того, что мой ответ (который я копирую/вставлял/редактировал с вашей) компилировал :) –