Meu projeto está idêntico ao que foi feito em aula e meu console segue em um loop infinito ao tentar executar a aplicação. Alguém teve esse mesmo problema sabe o que poderia estar errado? (Estou usando o Visua Studio 2022)
Segue o código da aplicação abaixo:
class Program
{
static void Main(string[] args)
{
IExpressao esquerda = new Soma(new Numero(1), new Numero(10));
IExpressao direita = new Substracao(new Numero(20), new Numero(10));
IExpressao soma = new Soma(esquerda, direita);
Console.WriteLine(soma.Avalia());
Impressora impressora = new Impressora();
soma.Aceita(impressora);
}
}
public class Soma : IExpressao
{
public IExpressao Esquerda { get; private set; }
public IExpressao Direita { get; private set; }
public Soma(IExpressao esquerda, IExpressao direita)
{
this.Esquerda = esquerda;
this.Direita = direita;
}
public int Avalia()
{
int valorEsquerda = Esquerda.Avalia();
int valorDireita = Direita.Avalia();
return valorEsquerda + valorDireita;
}
public void Aceita(Impressora impressora)
{
impressora.ImprimeSoma(this);
}
}
public class Substracao : IExpressao
{
public IExpressao Esquerda { get; private set; }
public IExpressao Direita { get; private set; }
public Substracao(IExpressao esquerda, IExpressao direita)
{
this.Esquerda = esquerda;
this.Direita = direita;
}
public int Avalia()
{
int valorEsquerda = Esquerda.Avalia();
int valorDireita = Direita.Avalia();
return valorEsquerda - valorDireita;
}
public void Aceita(Impressora impressora)
{
impressora.ImprimeSubtracao(this);
}
}
public class Numero : IExpressao
{
public int Valor { get; private set; }
public Numero(int numero)
{
this.Valor = numero;
}
public int Avalia()
{
return this.Valor;
}
public void Aceita(Impressora impressora)
{
impressora.ImprimeNumero(this);
}
}
public class ImpressoraVisitor
{
public void ImprimeSoma(Soma soma)
{
Console.WriteLine("(");
soma.Esquerda.Aceita(this);
Console.WriteLine("+");
soma.Direita.Aceita(this);
Console.WriteLine(")");
}
public void ImprimeSubtracao(Substracao subtracao)
{
Console.WriteLine("(");
subtracao.Aceita(this);
Console.WriteLine("-");
subtracao.Aceita(this);
Console.WriteLine(")");
}
public void ImprimeNumero(Numero numero)
{
Console.WriteLine(numero.Valor);
}
}