2
respostas

Private

Não entendi a diferença entre colocar a variável como private ou o set como private. Em nenhum das formas será possivel acessar ou modificar a variável fora do escopo, certo?

2 respostas

Olá, Natalia.

Quando vc diz que uma variável é private ela pertence somente aquele escopo, ou seja, ela só é vista ou ter o valor alterado por aquele escopo. Agora quando vc diz que o set da variável é private vc está dizendo que a variável é vista por um outro escopo( isso ocorre por meio do get que não é privado), mas ela não pode ter seu valor alterado dentro de um outro escopo.

Exemplo:

public class Pessoa { public string Nome { get; private set; } private string Cpf; }

Quando eu estanciar a classe pessoa e outra área do meu sistema eu vou conseguir acessar a variável(propriedade) mas não consigo alterar o valor dela e na variável(propriedade) Cpf e não consigo acessa-la, se eu tentar vai da erro de compilação.

Olá Natalia!

A diferença é que se colocar o set de uma propriedade como privado, você apenas não conseguirá alterar o valor fora da classe. Então terá que criar um método dentro da classe que faça isso usando esse set privado.

public string Propriedade { get; private set; }

Ao declarar um campo como privado, você terá acesso a uma propriedade com o set público, que processará os dados e só depois disso será guardados os valores. Eles servem para quando mais de um método tem acesso aos dados desse campo.

private string _campo;

    public string Propriedade
    {
        get
        {
            return _campo;
        }
        set
        {
        // Alguma validação ou processamento
            _campo = value;
        }
    }

No geral, usa-se o segundo modo quando mais de um método irá alterar o valor contido no campo e algum tipo de validação é necessária, então usa-se uma propriedade pública para garantir a validação.

Um pequeno exemplo é, que por uma regra de negócio, todos os dados de uma string tenha que ficar em maiúsculo para integrar o campo. Você pode colocar _campo = value.ToUpper(); ao invés de transformar as strings todas as vezes. Com isso, qualquer método que deseje inserir dados no campo, essa regra sempre será respeitada.

Para mais informações tem o link da documentação do C# sobre campos (em português) e também um link para um artigo no iMasters sobre campos e propriedades.

Espero ter ajudado! Bons estudos!