Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Desafio: hora da prática

Para as contas, o desafio foi simples: eu só tive que alterar o final, colocando get e set para cada um dos antigos atributos, para transformá-los em propriedades. Além disso, como boa prática, eu alterei do Camel Case para Pascal Case.

Conta.cs

public class Conta {
    public int Id {get; set;}
    public string? Titular {get; set;}
    public decimal Saldo {get; set;}
    public string? Senha {get; set;}

    public void ExibirInformacoes() {
        Console.WriteLine($"ID da conta: {Id}");
        Console.WriteLine($"Nome do Titular: {Titular}");
        Console.WriteLine($"Saldo do Titular: R${Saldo}");
        Console.WriteLine ($"Senha do titular: {Senha}");
    }
}

Chegando no Carro, a situação ficou um pouco mais complexa, porque eu não sabia exatamente como definir uma condição válida. No entanto, lendo a documentação, acabei compreendendo alguns padrões do C# em relação ao uso de get e set. Analisei as diferenças entre versões e percebi que, na minha, eu não poderia colocar, por exemplo, apenas {get; set {bloco}}, porque isso gerava um erro relacionado a uma keyword, que só foi resolvido em versões superiores. Por isso, trabalhei conforme essa limitação.

Todavia, no início ainda foi complicado, porque eu não sabia como aplicaria o get para retornar o valor da variável, o que estava gerando erros. Só depois descobri o conceito de campos de acesso privados para lidar com propriedades nesse tipo de situação. Assim, defini um padrão para quando ocorresse um erro no set, sendo esse padrão o valor 0. Ainda faltava, porém, resolver o problema final, que estava relacionado à descrição, que deveria variar. Inicialmente, pensei que o trabalho deveria ser feito no set, mas depois entendi e assimilei que deveria trabalhar especificamente no get.

Carro.cs

public class Carro {
    private int _AnoCarro = 0; // Campo particular de Acesso;
    public int AnoCarro {
        get => _AnoCarro;
        set { 
            if (value >= 1960 && value <= 2026) _AnoCarro = value; 
        }
    }
    public string? Fabricante {get; set;}
    public string? ModeloCarro {get; set;}
    public string DescricaoDetalhada {
        get {
            if (_AnoCarro != 0) return $"O Fabricante é a {Fabricante}, o modelo do carro é {ModeloCarro}, ele foi montado em {AnoCarro}";
            else return "Esse carro não pode existir.";
        }
    }

    public void Acelerar() {
        Console.WriteLine ("Acelerando...");
        Console.ReadKey();
    }
    public void Frear() {
        Console.WriteLine ("Freando...");
        Console.ReadKey();
    }
    public void Buzinar() {
        Console.WriteLine ("BEEEEEEEEEEP!!!");
        Console.ReadKey();
    }
}

Agora, a última atividade foi bem tranquila, já que eu já tinha compreendido os conceitos aprendidos anteriormente.

Produto.cs

public class Produto {
    public string? Nome {get; set;}
    public string? Marca { get; set; }
    
    private decimal _Preco = 0;
    public decimal Preco { 
        get => _Preco; 
        set {
            if (value > 0) _Preco = value; 
        } 
    }

    private int _Estoque = 0;
    public int Estoque { 
        get => _Estoque;
        set {
            if (value > 0) _Estoque = value; 
        } 
    }

    public void ExibirDetalhes() {
        Console.WriteLine ($"Nome: {Nome}");
        Console.WriteLine ($"Marca: {Marca}");
        Console.WriteLine ($"Preço: R${Preco}");
        Console.WriteLine ($"Quantidade: {Estoque}");
    }
}

Program.cs

var camisa = new Produto();
camisa.Nome = "Camisa";
camisa.Marca = "Supreme";
camisa.Preco = 200;
camisa.Estoque = 30;

Console.Clear();
camisa.ExibirDetalhes();
1 resposta
solução!

Olá, Diego, como vai?

Obrigado por compartilhar sua solução com tanto detalhe. A implementação demonstra uma boa compreensão do uso de properties em C# e também da diferença entre propriedades automáticas e propriedades com campo privado de apoio. A alteração de Camel Case para Pascal Case está alinhada com as convenções da linguagem, o que contribui para um código mais consistente.

Continue explorando essas variações de propriedades, especialmente propriedades somente leitura e propriedades calculadas, pois são muito utilizadas em projetos orientados a objetos.

O fórum segue à disposição para qualquer dúvida ou nova discussão que queira trazer.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!