Лучшая практика OO - передача ссылки вызывающего абонента на методы интерфейса
У меня есть ситуация, когда мне нужно вызвать методы, которые находятся в классе вызывающего абонента. Должен ли я передать " это " в качестве параметра, как я сделал ниже, или я должен вызывать события обратно вызывающему абоненту? Или есть другой способ, которым это обычно делается?
Что я уже пробовал:
Приведенный ниже пример работает, но кажется немного грязным. Я чувствую, что должен быть лучший способ.
void Main() { var stack = new Stack(); stack.Push(1); stack.Push(2); stack.Push(3); stack.Push(4); var specialStack = new SpecialStack(stack, new TriplePopper()); specialStack.SpecialPop(); // stack now only has a count of 1 } public class SpecialStack { IPopper _popper; Stack _stack; public SpecialStack(Stack stack, IPopper popper) { _stack = stack; _popper = popper; } public void SpecialPop() { _popper.SpecialPop(this); } public void PopOnce() { _stack.Pop(); } } public interface IPopper { void SpecialPop(SpecialStack stack); } public class DoublePopper : IPopper { public void SpecialPop(SpecialStack stack) { stack.PopOnce(); stack.PopOnce(); } } public class TriplePopper : IPopper { public void SpecialPop(SpecialStack stack) { stack.PopOnce(); stack.PopOnce(); stack.PopOnce(); } }