No C#, indexadores e propriedades são ferramentas fundamentais para trabalhar com coleções e encapsulamento de dados, proporcionando uma maneira simples e intuitiva de acessar e modificar valores em classes e objetos. Neste post, vamos explorar cada um desses conceitos e mostrar como utilizá-los para melhorar seu código.

O que são Propriedades?

As propriedades em C# são uma maneira elegante de expor os dados de uma classe, permitindo o acesso (leitura e/ou escrita) a campos privados por meio de métodos de acesso (getters e setters), sem expor diretamente o campo interno. Elas promovem o encapsulamento, o que é uma boa prática de programação orientada a objetos.

Exemplo de propriedade:

public class Pessoa
{
    private string nome;

    public string Nome
    {
        get { return nome; }
        set { nome = value; }
    }
}

No exemplo acima, a propriedade Nome permite acessar e modificar o campo privado nome. Podemos usar a propriedade assim:

Pessoa pessoa = new Pessoa();
pessoa.Nome = "Maria";
Console.WriteLine(pessoa.Nome); // Saída: Maria

As propriedades em C# também podem ser automáticas, o que simplifica ainda mais o código. Nesse caso, o compilador gera automaticamente um campo privado para armazenar o valor:

public class Pessoa
{
    public string Nome { get; set; }
}

Quando usar Propriedades?

  • Para encapsular o acesso a campos privados e garantir o controle sobre a leitura e escrita de dados;

  • Quando você deseja adicionar lógica personalizada durante o acesso ou modificação de um valor;

  • Para garantir que o estado interno do objeto esteja sempre consistente (por exemplo, validar o valor antes de atribuí-lo).

O que são Indexadores?

Os indexadores em C# permitem que você acesse elementos de uma classe ou estrutura como se fosse um array, utilizando uma sintaxe de colchetes ([]). Isso é especialmente útil quando você quer permitir que uma classe seja indexada por um valor, como um número ou uma string, para acessar itens de uma coleção interna.

Exemplo básico de indexador:

public class ColecaoDeNumeros
{
    private int[] numeros = new int[10];

    public int this[int index]
    {
        get { return numeros[index]; }
        set { numeros[index] = value; }
    }
}

No exemplo acima, a classe ColecaoDeNumeros permite acessar os números como se fosse um array:

ColecaoDeNumeros colecao = new ColecaoDeNumeros();
colecao[0] = 10;
Console.WriteLine(colecao[0]); // Saída: 10

Um exemplo mais avançado de indexador pode ser uma classe que utiliza strings como índices:

public class DicionarioSimples
{
    private Dictionary<string, string> dados = new Dictionary<string, string>();

    public string this[string chave]
    {
        get { return dados.ContainsKey(chave) ? dados[chave] : "Chave não encontrada"; }
        set { dados[chave] = value; }
    }
}

Agora podemos acessar o dicionário usando strings:

DicionarioSimples dic = new DicionarioSimples();
dic["Nome"] = "João";
Console.WriteLine(dic["Nome"]); // Saída: João
Console.WriteLine(dic["Idade"]); // Saída: Chave não encontrada

Quando usar Indexadores?

  • Quando sua classe encapsula uma coleção de elementos e você quer que seja fácil acessar esses elementos usando índices;

  • Quando você deseja implementar uma lógica personalizada para acessar uma coleção dentro da sua classe;

  • Para criar classes que simulam o comportamento de arrays ou dicionários, mas com mais controle sobre como os dados são armazenados e recuperados.

Principais diferenças

  • Propriedades são usadas para encapsular um único valor ou um conjunto de valores, enquanto indexadores permitem que você acesse um conjunto de dados em uma classe como se fosse um array ou dicionário;

  • Propriedades normalmente lidam com campos individuais de uma classe, enquanto indexadores lidam com coleções internas.

Outro exemplo prático

tipo nome {

  get {
		
     //código do acessor get
  }

  set {
		
     //código do acessor set
  }
 }
 
 //Tipo: Tipo da propriedade (int, float etc)
 //Nome: Nome da propriedade

 //Exemplo:

 public string FullName {
	
   get {
     return this.Name;
   }

   set {
     this.Name = value;
   }
}

class Teste {

   //Campo privado a ser gerenciado pela propriedade Prop
   int limite;

    public Teste() { //Construtor
      
       limite = 0;
    }
            
   //Propriedade que permite valores > 0 para o campo limite
   public int Prop {

    get { return limite; }
    set {
    	if(value >=0 )
	limite = value;
    }
}

Propriedades e indexadores tornam o código mais limpo, legível e fácil de manter, fornecendo um meio controlado de acessar e manipular dados em suas classes.

As propriedades ajudam a proteger a integridade do estado de um objeto, enquanto os indexadores oferecem uma maneira mais intuitiva de trabalhar com coleções encapsuladas em classes.

Aprenda do zero ou aprimore seus conhecimentos em C#. Domine os conceitos de Orientação a Objetos e crie sistemas complexos integrados com banco de dados.

CONHEÇA O CURSO COMPLETO DE C# COM + DE 100 AULAS PRÁTICAS. Tenha acesso vitalício e certificado de conclusão.

CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões sobre indexadores e propriedades em C#? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
 https://youtube.com/criandobits

Tags: |

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *