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

Campos encapsulados com visibilidade public

Gostaria de entender por que há um get e set em Nome , sendo que o mesmo está como public? Não deveria ser private?

 class Funcionario
    {
        public string Nome { get; set; }
...
} 
3 respostas
solução!

Olá Julho! Tudo bem?

Esse { get; set;} serve para indicar que a propriedade é realmente pública (tanto o get, quanto o set), afinal, tem que ter a implementação desses dois métodos para ser pública. E esse é um açúcar sintático, que é uma forma contraída (que o compilador aceita), do código:

private int myVar;

public int MyProperty
{
    get { return myVar; }
    set { myVar = value; }
}

Esse é só um meio de criar a sua propriedade. Ela pode ter o get público e o set privado ou protegido, se não colocar o get e nem o set, essa propriedade será somente leitura, onde só o construtor pode atribuir valor à propriedade. Ou seja, tem várias formas de criar a propriedade e esse é o jeito de criar uma propriedade pública. Dessa forma, não é necessário implementar os métodos GetNome() e SetNome(nome).

Espero ter ajudado e bons estudos!

Fala Julio,

Existe uma diferenca entre variaveis e propriedades tanto na sintaxe como no comportamento. Variaveis sao construidas com: Modificador de acesso // tipo de dados // nome da variavel

public string nome;

Propriedades com: Modificador de acesso // tipo de dados // nome da variavel // metodos de leitura e modificacao get e set

public string Nome { get; set; }

Um dos objetivos da orientacao a objeto eh manter seu codigo simples, robusto e de facil manutencao. As propriedades fazem com que voce suprima do mundo exterior como as coisas acontecem na sua classe com determinados campos. As propriedades te permitem esconder suas variaveis (deixando as privadas) expondo metodos (get e set) que sao interfaces que te permitem interagir com tuas variaveis. A diferenca basica esta na interacao. Com variaveis voce altera ou consome o valor de uma variavel diretamente acessando a propria variavel, ja com propriedades voce precisa passar por validacoes para chegar ate sua variavel.

Exemplo:

 private int _idade;
        public int Idade
        {
            get
            {
                return _idade;
            }
            set
            {
                if (value < 10)
                {
                    Console.WriteLine("Nao cadastrar usuario com idade menor que 10 anos");
                }
                else
                {
                    _idade = value;
                }
            }
        }

Como pode ver no exemplo acima estou usando uma propriedade Idade para que so permite o cadastro de idade maior que 10. Essas validacoes so podem ser feitas dentro de propriedades, as variaveis em si nao tem essa capacidade. As variaveis so sao repositorios de dados.

Antes das propriedades existirem o que se fazia era criar funcoes/metodos que fizessem o papel da propriedade. Era mais codigo gerado que tinha que ser implementado se quisessemos ter esse nivel de encapsulamento.

Espero ter esclarecido.

Abs

Muito obrigado pelas explicações, consegui entender agora. Abs.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software