1
resposta

[Dúvida] Não entendi como funciona o GET e SET, exercicio 3 classe Carro

class Carro
{
    public double Acelerar { get; set; }
    public double Frear {  get; set; }
    public string Modelo { get; set; }
    public int Ano 
    {
        get; 
        set
        {
            if (Ano >= 1960 && Ano <= 2023)
            {
                 Ano = this.Ano;
            }
            else
            {
                Console.WriteLine("Ano errado");
                
            }
        }
    }
    public string Marca { get; set; }

    public string DescricaoDetalheda => $"Marca {Marca}\n Modelo {Modelo}\n Ano{Ano}";
    





    public double Acelerando(double numDaAceleracao, int tempoDeAceleracao)
    {
        
        

        for (int i = 0; i < tempoDeAceleracao; i++)
        {
            numDaAceleracao *= 2;
            Console.WriteLine($"Acelerando {numDaAceleracao}");
        }

        return numDaAceleracao;

        
    }

    public void Freando(double aceleracaoAtual, int tempoDeFrear)
    {
        for(int i = 0; i < tempoDeFrear; i++)
        {
            aceleracaoAtual *= 0.5;
            Console.WriteLine($"Freando {aceleracaoAtual}");

            if (aceleracaoAtual <= 0)
            {
                break;
            }
        }

    }

    public void Buzina()
    {
        Console.WriteLine("BI BI");
    }


}

Como devo escrever esse set e get ?
Estou recebendo no Console isso ![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade ) )

e no código bem eim baixo do Ano fica vermelho, recebendo o seguinte erro ![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

1 resposta

Olá Samuel! Tudo bem?

Pelo que analisei, parece que está ocorrendo um problema de recursão infinita no set da propriedade Ano. Isso acontece porque você está tentando atribuir Ano a this.Ano, o que causa um loop sem fim.

Aqui está como você pode corrigir isso:

class Carro
{
    private int ano;
    
    public double Acelerar { get; set; }
    public double Frear { get; set; }
    public string Modelo { get; set; }
    public string Marca { get; set; }

    public int Ano
    {
        get { return ano; }
        set
        {
            if (value >= 1960 && value <= 2023)
            {
                ano = value;
            }
            else
            {
                Console.WriteLine("Ano errado");
            }
        }
    }

    public string DescricaoDetalheda => $"Marca {Marca}\nModelo {Modelo}\nAno {Ano}";

    public double Acelerando(double numDaAceleracao, int tempoDeAceleracao)
    {
        for (int i = 0; i < tempoDeAceleracao; i++)
        {
            numDaAceleracao *= 2;
            Console.WriteLine($"Acelerando {numDaAceleracao}");
        }
        return numDaAceleracao;
    }

    public void Freando(double aceleracaoAtual, int tempoDeFrear)
    {
        for (int i = 0; i < tempoDeFrear; i++)
        {
            aceleracaoAtual *= 0.5;
            Console.WriteLine($"Freando {aceleracaoAtual}");

            if (aceleracaoAtual <= 0)
            {
                break;
            }
        }
    }

    public void Buzina()
    {
        Console.WriteLine("BI BI");
    }
}

A mudança principal foi a introdução de um campo privado ano para armazenar o valor real da propriedade Ano. O set agora usa value para verificar e atribuir o valor.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.