public static void Invoke() { var additionExpression = new AdditionExpression(new DoubleExpression(10), new AdditionExpression(new DoubleExpression(11), new DoubleExpression(12))); var printerExpression = new StringBuilder(); additionExpression.Print_Internal(printerExpression); Console.WriteLine("Internal Print : " + printerExpression); printerExpression.Clear(); ClassicExpressionPrinter.Print_ConditionalMethod(additionExpression, printerExpression); Console.WriteLine("ConditionalMethod : " + printerExpression); var expressionPrinter = new ExpressionPrinter(); expressionPrinter.Visit(additionExpression); expressionPrinter.Clear(); expressionPrinter.Print(additionExpression); Console.WriteLine("Classic Visitor : " + expressionPrinter); var expressionCalculator = new ExpressionCalculator(); expressionCalculator.Visit(additionExpression); Console.WriteLine("Classic Visitor : " + expressionPrinter + "=" + expressionCalculator); var expressionPrinter1 = new GenericExpressionPrinter(); expressionPrinter1.Visit(additionExpression); Console.WriteLine("Generic Visitor : " + expressionPrinter1); var expressionCalculator1 = new GenericExpressionCalculator(); expressionCalculator1.Visit(additionExpression); Console.WriteLine("Generic Visitor : " + expressionPrinter1 + "=" + expressionCalculator1); }
public void Visit(AdditionExpression visitable) { sb.Append("("); visitable.Left.Accept((IVisitor)this); sb.Append(" + "); visitable.Right.Accept((IVisitor)this); sb.Append(")"); }
/// <summary> /// since dynamic is used if any of Expression is passed which is not part of Print(T) then runtime crash will occur /// and it has performance impact /// </summary> /// <param name="additionExpression"></param> public void Print(AdditionExpression additionExpression) { sb.Append("("); Print((dynamic)additionExpression.Left); sb.Append(" + "); Print((dynamic)additionExpression.Right); sb.Append(")"); }
public void Visit(AdditionExpression additionExpression) { sb.Append("("); additionExpression.Left.Accept((IExpressionVisitor)this); sb.Append(" + "); additionExpression.Right.Accept((IExpressionVisitor)this); sb.Append(")"); }
public void Visit(AdditionExpression visitable) { visitable.Left.Accept((IVisitor)this); var leftResult = Result; visitable.Right.Accept((IVisitor)this); var rightResult = Result; Result = leftResult + rightResult; }
public void Visit(AdditionExpression additionExpression) { additionExpression.Left.Accept((IExpressionVisitor)this); var leftResult = Result; additionExpression.Right.Accept((IExpressionVisitor)this); var rightResult = Result; Result = leftResult + rightResult; }