public void Visit(DoubleDispatchAdditionExpression ae)
        {
            ae.Left.Accept(this);
            double a = Result;

            ae.Right.Accept(this);
            double b = Result;

            Result = a + b;
        }
Example #2
0
        // 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}");
        }