C# – Para Iniciantes – Parte 5 – Properties

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.

17 pensou em “C# – Para Iniciantes – Parte 5 – Properties

  1. 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!!!

  2. 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;}
    }

  3. 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!

          • 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#.

  4. 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:

      using System;
      
      namespace ConsoleApplication1
      {
          class Program
          {
              static void Main(string[] args)
              {
                  Teste.TesteSemNome();
      
                  Teste.TesteComNome();
      
                  Console.Read();
              }
      
              public class Cliente
              {
                  public Cliente()
                  {
                      Nome = "Desconhecido";
                  }
      
                  public string Nome { get; set; }
              }
      
              public static class Teste
              {
                  public static void TesteSemNome()
                  {
                      var cliente = new Cliente();
      
                      Console.WriteLine(cliente.Nome);
                  }
      
                  public static void TesteComNome()
                  {
                      var cliente = new Cliente() {Nome = "Eduardo"};
      
                      Console.WriteLine(cliente.Nome);
                  }
              }
          }
      }
      
  5. 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

  6. 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.

  7. 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 ); } }

  8. Uma pergunta como eu faço pra testar o set da propriedade, pra saber se ele estar recebendo algum valor?

Os comentários estão fechados.