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

Qual a diferença entre a escrita dos atributos dessas classes e qual a melhor?

Estava fazendo um exercício e a Classe que escrevi ficou assim:

class Funcionario {
        public int Id;
        public string Nome;
        private double _salario;

        public Funcionario(int identificacao, string nome, double salario) {
            Id = identificacao;
            Nome = nome;
            _salario = salario;
        }

        public void AumentoSalario(double porcentagem) {
            _salario = _salario + ((_salario * porcentagem) / 100);
        }
    }

Mas um outro código que vi estava assim:

class Employee {

        public int Id { get; set; }
        public string Name { get; set; }
        public double Salary { get; private set; }

        public Employee(int id, string name, double salary) {
            Id = id;
            Name = name;
            Salary = salary;
        }

        public void IncreaseSalary(double percentage) {
            Salary += Salary * percentage / 100.0;
        }
    }

Qual a diferença entre colocar ou não colocar esses acessores get e set nos atributos?

2 respostas
solução!

Os getters e setters eles permitem você você pegue e mude os atributos de uma maneira indireta, basicamente eles serão seus intermediadores quando quiser exibir ou editar um valor de atributo na sua classe quando você estiver numa instância dela por exemplo.

A única real diferença é que quando os acessores são colocados diretamente nos atributos é que eles são chamados de acessores auto-implementados, basicamente se seus getters e setters não vão possuir nenhuma lógica (eles vão literamente apenas acessar o valor e settar ou retorná-lo), é uma maneira implícita de escrever. (Evita que você escreva algo do tipo, logo abaixo, afinal como você pode notar não há nenhuma lógica ele apenas setta o valor ou retorna o valor)

...
        get { return Nome; }
        set { Nome = value; }
...

Agora caso seus atributos precisem de alguma verificação que faça uso de uma lógica você precisa configurar o setter e o getter manuamente com a lógica que você deseja. Por exemplo o Nome deve possuir mais de 3 letras, aí você define essa lógica no setter.

Esse link explica um pouquinho mais sobre isso ;) C# Properties (GET, SET)

Tenha uma boa noite Maria Eduarda!!! Bons estudos!!!

Excelente resposta, agora entendi bem! Muito obrigada mesmo!