Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida em encapsulamento

Bom dia! Estou realizando um projeto para a faculdade e o professor nos ensinou a realizar o encapsulamento como no exemplo abaixo:

    private int _IdClientes;
        public int IdClientes
        {
            get { return _IdClientes; }
            set { _IdClientes = value; }
        }

Mas quando fui implentar a validação dos campos usando arquitetura MVC, esse tipo de encapsulamento não funcionou e tive que optar por essa estrutura:

    public int IdClientes { get; set; }

Alguém poderia me explicar a diferença conceitual entre esses encapsulamentos? Pois neste que estou usando agora, não há criação de propriedade. É o exemplo que mais vejo sendo usado em tutoriais, mas preciso entender a diferença entre os dois.

Desde já agradeço!

2 respostas
solução!

Boa tarde. Então em relação a conceito, a declaração do tipo:

 public int IdClientes { get; set; }

São chamadas da propriedades automáticas. Vem desde a versão 3.0 do C#. São utilizadas quando não se tem nenhuma lógica para seus assessores, tanto "Get " quanto o "Set". Ao declarar uma propriedade automática, o compilador cria um campo de suporte privado e anônimo que pode ser acessado somente por meio dos acessadores get e set da propriedade. Caso tenha alguma lógica para utilizar seu assessores uso o tipo de propriedade completa:

public double Hours
{
   get { return seconds / 3600; }
   set { 
      if (value < 0 || value > 24)
         throw new ArgumentOutOfRangeException(
               $"{nameof(value)} must be between 0 and 24.");

      seconds = value * 3600; 
   }
}

Em relação esse tipo de declaração não funcionar no padrão mvc teria que ver com esta utilizando ele para ver onde se encontra o problema, pois deveria funcionar. Se possível, coloque o trecho de código que utilizou ele que deu o erro.

Olá, Luis! Obrigada pela sua resposta e desculpe a demora no retorno.

O erro era inespecífico, não havia uma mensagem de erro, apenas não validava mesmo.

Mas sua resposta já me ajudou onde eu precisava, por isso agradeço sua atenção e disponibilidade!