Neste artigo vou apresentar o conceito de indexadores na linguagem C# e a sua utilidade. |
O que são Indexadores ou Indexers ?
Para iniciar, vamos recorrer ao site da Microsoft para ver qual a definição de indexadores e as suas propriedades.
Visão Geral:
Então para que serve mesmo um indexador ?
A utilidade é fornecer uma sintaxe para acessar, através do índice, itens de um objeto que represente uma coleção.
Observe 3 palavras chaves : índice , objeto, coleção
Nota : Para entender o conceito de indexadores você tem que conhecer arrays e/ou coleções e sua sintaxe.
Dessa forma você pode criar uma classe que representa uma coleção e pode acessar os itens da coleção, os seus objetos, do mesmo modo que faz quando acessa um array.(usando índices)
Dizendo a mesma coisa em outras palavras : Os indexadores permitem que um tipo possa ser acessado da mesma forma que uma array (usando índices).
Para declarar um indexador em uma classe ou struct, use a palavra-chave this, como neste exemplo:
public int this[int index] // declaração do Indexer
{
// acessores get e set
}
|
Veja que a sintaxe é bem simples:
Vejamos um exemplo prático para clarear o entendimento...
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando o projeto no VS Community
Abra o VS Community 2015 e clique em New Project;
Selecione a linguagem Visual C# e o template Windows Forms Application;
Informe o nome DataGridView_Crud e clique no botão OK;
A seguir clique em Project -> Add Class e informe o nome Time.
A seguir inclua o código abaixo no arquivo Time.cs:
public class Time
{
string[] _valores = new string[10]; //define os limites do array
public string this[int numero]
{
get
{
// Será invocado quando acessarmos instâncias da classe Time com []
if (numero >= 0 && numero < _valores.Length)
{
// retorna o valor armazenado
return _valores[numero];
}
// Retorna um erro
return "Erro";
}
set
{
// Será invocado quando atribuímos valores a instâncias de Time com []
if (numero >= 0 && numero < _valores.Length)
{
// atribui valor ao elemento
_valores[numero] = value;
}
}
}
}
|
A seguir vamos usar o indexador definido na classe Time.
Inclua o código abaixo no método Main() da classe Program:
class Program
{
static void Main(string[] args)
{
// Cria uma instância da classe Time e atribui elementos
// ... no array através dos indexadores
Time time = new Time();
time[1] = "Palmeiras";
time[3] = "Santos";
time[5] = "São Paulo";
time[7] = "Corintians";
time[-1] = "Flamento";
time[1000] = "Erro";
// Le os elementos usando os indexadores
string valor1 = time[1];
string valor2 = time[3];
string valor3 = time[5];
string valor4 = time[7];
string valor5 = time[9];
string valor6 = time[-1];
// Escreve o resultado
Console.WriteLine(valor1);
Console.WriteLine(valor2);
Console.WriteLine(valor3);
Console.WriteLine(valor4);
Console.WriteLine(valor5); // É null
Console.WriteLine(valor6);
Console.Readkey();
}
}
|
Executando o projeto iremos obter o seguinte resultado :
Neste programa criamos uma classe Time com um indexador definido.
A classe Time contém um indexador que possui um método com get para obter valores e set para atribuir valores.
Os acessores (get e set) possuem a lógica que assegura que o array não será acessado fora dos seus limites (10 elementos).
O programa exibe os 4 primeiros elementos válidos da classe Time, um valor inválido (null) e também o resultado de um acesso inválido. (Erro)
O recurso indexadores era muito usado antes da introdução das coleções Generics.
Observe que você tem que implementar a função que acessa e atribui valores ao item.
Pegue o projeto completo aqui : CSharp_Indexers.zip
Deitar-me faz em verdes pastos, guia-me
mansamente a águas tranqüilas.Refrigera a minha alma; guia-me pelas veredas da
justiça, por amor do seu nome.
Salmos 23:2,3
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET