public void Visit(DoubleDispatchAdditionExpression ae) { ae.Left.Accept(this); double a = Result; ae.Right.Accept(this); double b = Result; Result = a + b; }
// Classic Visitor Pattern private static void DoubleDispatchVisitorExample() { var e = new DoubleDispatchAdditionExpression(new DoubleDispatchDoubleExpression(1.0), new DoubleDispatchAdditionExpression(new DoubleDispatchDoubleExpression(2.0), new DoubleDispatchDoubleExpression(3.0))); var ep = new DoubleDispatchExpressionPrinter(); ep.Visit(e); Console.WriteLine(ep); var ec = new ExpressionCalculator(); ec.Visit(e); Console.WriteLine($"{ep} = {ec.Result}"); }