5
respostas

[Desafio] - Resolução

1. Reescrever a classe Conta, criada no ultimo desafio, utilizando properties.

class ContaBancariaProperties
{
    public int Conta { get; set; }
    public string Nome { get; set; }
    public long Cpf { get; set; }
    public double Saldo { get; set; }
}

2. Reescrever os atributos da classe Carro, de modo que eles sejam properties e adicionar uma nova propertie DescricaoDetalhada, que mostra o fabricante, modelo e ano do carro.

class CarroProperties
{
    public string Marca { get; set; }
    public string Modelo { get; set; }
    public int Ano { get; set; }
    public string Combustivel { get; set; }
    public string DescricaoDetalhada { get => $"Fabricante: {Marca} \nModelo: {Modelo} \nAno: {Ano}"; }

}

3. Reescrever a propriedade Ano da classe carro, para que ela apenas aceite valores entre 1960 e 2023.

class CarroProperties
{
    public string Marca { get; set; }
    public string Modelo { get; set; }
    
    private int ano;
    public int Ano
    {
        get => ano;

        set
        {
            if (value >= 1960 && value <= 2023)
            {
                ano = value;
            }
            else
            {
                Console.WriteLine($"O ano do carro {Marca} {Modelo} deve estar entre 1960 e 2023.");
            }
        }
    }

    public string Combustivel { get; set; }
    public string DescricaoDetalhada { get => $"Fabricante: {Marca} \nModelo: {Modelo} \nAno: {Ano}"; }

    public void ExibirInformacoesDosCarros()
    {
        if (ano == 0)
        {
            Console.WriteLine($"Marca: {Marca} \nModelo: {Modelo} \nAno: ANO INVÁLIDO! É necesário cadastrar um ano válido!");
        }
        else
        {
            Console.WriteLine($"Marca: {Marca} \nModelo: {Modelo} \nAno:{Ano}");
        }

        Console.WriteLine();
    }
}

4. Desenvolver a classe Produto, com os atributos nome, marca, preco e estoque. Além disso, garantir que o preço e o estoque do produto sejam valores positivos e criar uma propriedade que mostra detalhadamente as informações do produto, para que seja usado pela equipe de vendas.

class Produto
{
    public string nome;
    public string marca;
    public double PrecoEntrada
    {
        set
        {
            if (value <= 0)
            {
                Console.WriteLine("O preço do produto precisa ser Maior que 0.");
            }
            else
            {
                preco = value;
            }
        }

        get => preco;
    }
    public int EstoqueEntrada
    {
        set
        {
            if (value <= 0)
            {
                Console.WriteLine("O estoque precisa ser Maior que 0.");
            }
            else
            {
                estoque = value;
            }
        }

        get => estoque;
    }
    private double preco;
    private int estoque;

    public string InformacoesDetalhadas
    {
        get => $"Informações do Produto: \nProduto: {marca} {nome} \nEstoque: {estoque} unidades \nPreço: {preco.ToString("C")}";
        {
            return $"O produto {marca} {nome} consta com {estoque} unidades em estoque";
        }
    }
}   

Me surgiram algumas dúvidas:

  1. Faz alguma diferença a sequência em que eu escrevo o get e set? Ou seja, { get; set; } é diferente de { set; get; }? Eu fiz de uma forma em um desafio e de outra forma em outro pra ver se tinha alguma diferença, mas aparentemente não tem. É isso mesmo?

  2. O set eu entendi que ele "seta" (insere/atribui) um valor dentro de uma variável que seja privada. Por exemplo, no caso da classe Produto, eu atribuo o valor que o usuário digitou na variável privada se este valor atender a alguns requisitos. Ok. Mas o get pra mim está confuso, principalmente nos exemplos do desafio. Pode me explicar melhor?

5 respostas

Olá, Fábio! Tudo bem?

Analisando seus códigos, posso dizer que você fez um excelente trabalho. Todos os códigos estão corretos e seguem as instruções do desafio.

Então, continue com o bom trabalho e não hesite em pedir ajuda sempre que precisar.

Bons estudos!

Obrigado Armano, porém ainda fiquei com as dúvidas que mencionei ao final do meu post. Consegue me ajudar?

Gente! Ninguém vai me responder?

Olá, Fábio! Peço perdão pela demora em responder.

Sobre sua última dúvida: sim, a ordem entre get e set nas properties não interfere no comportamento do código. Tanto faz usar { get; set; } quanto { set; get; }, o compilador entende da mesma forma. A escolha da ordem é apenas uma questão de estilo ou preferência pessoal.

Já em relação ao funcionamento do get, ele serve para retornar o valor da propriedade quando ela for acessada. Vamos ver um exemplo direto da sua classe Produto para ilustrar isso:

private double preco;

public double PrecoEntrada
{
    set
    {
        if (value <= 0)
        {
            Console.WriteLine("O preço do produto precisa ser Maior que 0.");
        }
        else
        {
            preco = value;
        }
    }

    get => preco;
}

No trecho acima:

  • O set atribui um valor à variável privada preco, com uma validação.
  • O get simplesmente devolve o valor de preco.

Ou seja, quando você fizer algo como:

Produto produto = new Produto();
produto.PrecoEntrada = 50.0; // Isso chama o set
Console.WriteLine(produto.PrecoEntrada); // Isso chama o get e imprime 50.0

Se quiser ver isso de forma mais explícita, você pode reescrever o get assim:

get
{
    return preco;
}

Ambas formas funcionam igual. O => é só uma forma simplificada de escrever return.

Fico à disposição.

Obrigado