Olá pessoal, Falaremos hoje sobre C# Properties.
Uma propriedade (Property) é um membro de uma classe que fornece um mecanismo flexível para ler, gravar ou calcular o valor de um dado em particular.
As propriedades permitem que uma classe exponha de uma maneira pública a obtenção e definição destes valores.
Por ex. Temos a classe Carro, uma propriedade de carro é sua cor, ou seja, Cor é um atributo (propriedade) de Carro.
Uma propriedade pode obter um valor de uma classe e também pode defini-lo, sendo assim temos propriedades Read/Write ou apenas Readonly.
Um exemplo:
// Essa é sua variável interna (privada) private string _cor; // Essa é sua propriedade pública. public string Cor { get { return _cor; } set { _cor = value; } }
Notaram que ao ler o valor (get) a propriedade retorna o valor da variável interna e ao gravar (set) a variável interna é alterada para um novo valor.
// Fazendo Get string CorCarro = Carro.Cor; // Fazendo Set Carro.Cor = "Preto";
E se a propriedade for Readonly?
// Essa é sua variável interna (privada) private string _cor; // Essa é sua propriedade pública. public string Cor { get { return _cor; } }
Viram? Internamente não implementa o recurso do Set, ou seja, apenas podemos ler o estado, sem alterá-lo.
Agora que já está entendido, mais novidade:
Desde o C# 3.0 (Já estamos no 5.0) foi incluído o recurso de Automatic Properties (Propriedades Automáticas), ou seja, não necessitamos mais declarar o Get nem o Set, aquela variável interna de controle também não (é gerenciado automático).
Então como fica?
// Essa é sua propriedade Read/Write. public string Cor { get; set; } // Essa é sua propriedade Readonly. public string Cor { get; }
Menos código, mais agilidade 🙂
Tem mais uma novidade, através do Visual Studio (2008 ou superior) podemos escrever rapidamente muitas propriedades utilizando o atalho “prop”
É muito simples, Apenas digite prop e dê Tab duas vezes.
Abaixo um vídeo que produzi para ilustrar:
É isso ai pessoal, esse artigo abordou de forma simples sobre as properties, na abordagem sobre classes falaremos mais 🙂
No caso de dúvidas utilizem os comentários.
Muito bom, sabia apenas no for, while, não sabia que também funcionava com as propriedades!!! vlw.. Muito boa a idéia de fazer o artigo e depois mostrar no vídeo! ÓTIMO!!!
boas não sei se no seu compilador deu erro mas no meu apareceu
private string _cor;
public int Cor//de onde veio esse int
{
get { return _cor; }
set { _cor = value;}
}
Fala meu caro!
Foi uma falha de edição, obrigado por avisar, está corrigido.
A property cor é string mesmo.
Abraços.
Olá!
No exemplo apresentado:
public String Cor {get;}
Fica definido como readonly mesmo estando declarado como public?
Olá Renata,
ReadOnly significa que você não pode atribuir uma informação a essa propriedade, apenas ler, por ex caso ela fosse private, apenas a propria classe dessa propriedade poderia ter acesso a ela, caso você instanciasse essa classe de uma outra classe você não conseguiria ler o dado desse propriedade, pois não está como public.
Ajudei?
Abs!
Entendi. Mas estando como public eu poderia atribuir um valor a essa propriedade. Declarando dessa forma:
public String Cor {get;}
eu retiro o poder de atribuir valor mesmo estando como public?
Olá Renata,
Não é o modificador de acesso que permite a gravação e sim a estrutura da sua propriedade:
ReadOnly
public String Cor {get;}
Normal
public String Cor {get; set;}
Normal com Set privado
public String Cor {get; private set;}
Note que não existe “Set” em ReadOnly, por isso não é possível atribuir. Da mesma forma que sua propriedade pode ser pública e apenas o seu “Set” pode ser privado como no último exemplo.
Ficou mais claro para você?
Abs!
Ficou sim! Obrigada pela atenção 🙂
Talvez tenha ficado um pouco confuso por causa de linguagens como PHP e Java, onde é usado o modificador de acesso para definir se será possível alterar o attribute/property de fora do escopo da classe. Eu me confundi por causa disso quando comecei no C#.
olá amigo, na propriedade automatica quando nao é atribuido nada a propriedade ela fica nula, como resolver isso, para que mesmo que nao seja atribuido nada a propriedade ela nao fique nula.
att.
Ivo Barcelos
Olá Ivo,
Sim fica nula, você precisa setar algo nela, caso queira definir um valor padrão você pode fazer isso no construtor, segue um exemplo de um projeto console application:
Olá Eduardo, estou programando com C# a pouco tempo, estudando ainda a linguagem pra ser sincero. Nao sei se estou errando no codigo(acredito que nao) mais o get e set automatico nao funciona cmg cara. Um exemplo pra vc entender melhor. Por exemplo, no desenvolvimento de um banco(conta). ao criar a class Conta e fazer as properties para numeroDaConta, nome e Saldo por exemplo usando o get e set. qnd chamo no formulario ele so consegue puxar o nuemroDaConta por exemplo e o saldo e nome nao. So consigo resolver criando metodos para os mesmos.
//abaixo isso nao funciona, nao consigo buscar o saldo
public double Saldo { get; private set; }
//isso abaixo funciona
public double pegaSaldo() { return this.saldo; }
Se voce puder me ajudar, ficaria muito grato, pois nao sei oqe acontece, sinceramente ja bati cabeça e nao conseguir achar onde estou errando. Abraços
Olá!
Bem explicado. O “prop” + [Tab] é um pulo de gato. Valeu!
Se eu estiver declarando um variavel privada, eu posso usar o get e o set como public?
Pq eu to fazendo um trabalho em java e ele faz o get e o set public mesmo a variavel sendo privada.
Quando eu fui fazer pelo metodo já implementado, no caso prop 2x TAB, ele não deixa eu colocar public antes do get ou set.
Oi Eduardo, tudo bem?
Eu gostaria de saber como usar o valor de outras propriedades em uma outra.
por exemplo
public string Endereco{ get; set; }
public string Numero { get; set; }
public string EnderecoCompleto {Endereco + Numero }
Gostaria de fazer isso automaticamente.
Fábio, usando c# 6 ou superior.
public string EnderecoCompleto { get { return $”{nameof(this.Endereco)} – {nameof(this.Numero )}” ; } }
usando abaixo do C# 6
public string EnderecoCompleto { get { return string.Format(“{0} – {1}”, this.Endereco, this.Numero ); } }
Uma pergunta como eu faço pra testar o set da propriedade, pra saber se ele estar recebendo algum valor?