private static void Visitor1() { var esquerda = new Soma(new Numero(5), new Numero(10)); var direita = new Subtracao(new Numero(20), new Numero(10)); var teste = new Multiplicacao(esquerda, direita); var teste2 = new Divisao(new Numero(10), new Numero(2)); var resultado = new Multiplicacao(teste, teste2); var impressora = new ImpressoraVisitor(); resultado.Aceita(impressora); Console.WriteLine(""); //var impressora2 = new ImpressoraVisitorSinalEsquerda(); //resultado.Aceita(impressora2); //Console.WriteLine("\n"+ resultado.Avalia()); }
private static void TestaVisitorExemploCalculadora() { var esquerda = new Soma(new Soma(new Numero(1), new Numero(100)), new Numero(10)); // (1+100) + 10 = 111 var direita = new Subtracao(new Numero(20), new Numero(10)); // 20 - 10 = 10 var soma = new Soma(esquerda, direita); // 111 + 10 = 121 var impressora = new ImpressoraVisitor(); soma.Aceita(impressora); //Imprime expressão. Console.WriteLine($" = {soma.Avalia()}."); //Imprime resultado. var multiplicacao = new Multiplicacao(new Subtracao(new RaizQuadrada(new Numero(9)), new Numero(2)), new Divisao(new Numero(6), new Numero(3))); // (((√9)-2)*(6/3)) multiplicacao.Aceita(impressora); Console.WriteLine($" = {multiplicacao.Avalia()}."); Console.ReadKey(); }
static void Main(string[] args) { IExpressao esquerda = new Soma(new Numero(1), new Numero(10)); IExpressao direita = new Subtrai(new Numero(17), new Numero(4)); IExpressao resultSoma = new Soma(esquerda, direita); IExpressao resultMultiplicacao = new Multiplicacao(esquerda, direita); IExpressao resultDivisao = new Divisao(esquerda, direita); Console.WriteLine(resultSoma.Avalia()); Console.WriteLine(resultMultiplicacao.Avalia()); Impressora impressora = new Impressora(); resultSoma.Aceita(impressora); resultMultiplicacao.Aceita(impressora); resultDivisao.Aceita(impressora); // Avaliador de Expressões da própria linguagem C# // Expression soma = Expression.Add(Expression.Constant(10), Expression.Constant(29)); // Func<int> funcao = Expression.Lambda<Func<int>>(soma).Compile(); // Console.WriteLine(funcao.Invoke()); }