public override void VisitElementA(ElementA elementA) { // Код который мог быть размещен в классе ElementA, // расширяет собой класс ElementA. elementA.SomeState = "State A"; Console.WriteLine(elementA.SomeState); // Работа с разнородным интерфейсом. elementA.OperationA(); }
static void Main() { ElementA elementA = new ElementA(); ElementB elementB = new ElementB(); elementA.VisitConcreteElementA(); elementB.VisitConcreteElementB(); // Задержка. Console.ReadKey(); }
public abstract void VisitElementA(ElementA el);
public override void VisitElementA(ElementA el) { Console.WriteLine("{0} visited by {1}", el.GetType().Name, this.GetType().Name); }
public abstract void VisitElementA(ElementA elementA);
public static void VisitConcreteElementA(this ElementA element) { element.OperationA(); }