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

Propriedades C#

Existe alguma diferença em:

public idade; public idade { get; set; }

Ou é a mesma coisa ?

4 respostas

Olá Djalma

Os códigos que você postou são diferentes.

No primeiro você está criando um atributo público na classe que pode ser acessado por qualquer programador de todo o projeto. No segundo caso, você está criando uma propriedade que pode ter o acesso controlado caso necessário.

public class Conta
{
    public double saldo;
}

Nesse código eu criei um atributo público e por isso qualquer um pode executar o código abaixo:

Conta c = new Conta();
c.saldo = 10000;
c.saldo += 100000;
MessageBox.Show("saldo = " + c.saldo);

Quando deixamos qualquer um acessar as informações da classe estamos criando um problema futuro de manutenção por que estamos violando o encapsulamento da classe.

Mas se usamos propriedades, podemos restringir o seu acesso:

public class Conta
{
    public double Saldo { get; private set; }
}

Com esse código apenas a conta pode modificar o saldo:

Conta c = new Conta();

// Essa linha não funciona pois apenas a conta
// pode modificar seu saldo
c.Saldo = 10000;

// Esse código também tenta modificar o saldo e
// por isso também não funciona
c.Saldo += 100000;

// Esse código funciona pois apenas o set é privado,
// portanto ainda podemos ler o seu valor.
Console.WriteLine("saldo = " + c.Saldo);

Para mais informações leia o capítulo sobre encapsulamento da apostila aberta do curso de C# e orientação a objetos da caelum: https://www.caelum.com.br/apostila-csharp-orientacao-objetos/encapsulamento-e-modificadores-de-acesso/

Essa maneira eu até que havia entendido. A minha dúvida era se as propriedades assumissem o valor default. int variavel {get; set;} não seria o mesmo que public int variavel;

Abs

solução!

Lembre-se que as propriedades são apenas uma forma de controlar o acesso aos atributos da classe, logo se ela não for inicializada a propriedade terá o mesmo valor padrão de um atributo.

Entendi mestre. Obrigado pela resposta e atenção!

Abs!