http://milaneze.com.br/post/2009/05/17/C-Indexadores.aspx
Indexadores permitem acessar uma lista de elementos através do nome do objeto usando a palavra-chave this. Usando C# convencional, um elemento de um array é acessado usando-se como índice um valor inteiro (ex.: dimensoes[1]). Com indexadores, é possível utilizar strings (ex.: caixa["largura"], onde caixa é um objeto).
Embora indexadores sejam usados como arrays, os indexadores são declarados como propriedades em uma classe. Ao contrário das propriedades, onde é possível escolher qualquer nome, os indexadores são declarados com a palavra-chave this.
A sintaxe é a seguinte:
1: accessModifier returnType this[ IndexType1 name1, IndexType2 name2, ... ]
2: { 3: get 4: {5: // use name1, name2, ... here to get data
6: } 7: set 8: {9: // use name1, name2, ... here to set data
10: } 11: }Os códigos abaixo dão exemplos de como declarar e depois de como acessar indexadores.
1: class Caixa
2: {3: private double[] dimensoes = new double[3];
4: private string[] medidas = { "largura", "altura", "comprimento" };
5: 6: public Caixa(double largura, double altura, double comprimento)
7: { 8: dimensoes[0] = largura; 9: dimensoes[1] = altura; 10: dimensoes[2] = comprimento; 11: } 12: 13: public double this[int index]
14: { 15: get 16: {17: if (index >= 0 && index < dimensoes.Length)
18: return dimensoes[index];
19: else
20: return -1;
21: } 22: 23: set 24: {25: if (index >= 0 && index < dimensoes.Length)
26: dimensoes[index] = value;
27: } 28: } 29: 30: public double this[string medida]
31: { 32: get 33: {34: int i = 0;
35: 36: foreach (string palavra in medidas)
37: if (palavra == medida)
38: return dimensoes[i];
39: else
40: i++; 41: 42: return -1;
43: } 44: 45: set 46: {47: int i = 0;
48: 49: while (i < medidas.Length)
50: {51: if (medida == medidas[i])
52: dimensoes[i] = value;
53: 54: i++; 55: } 56: } 57: } 58: }Exemplo de como usar os indexadores:
1: class Program
2: {3: static void Main(string[] args)
4: {5: Caixa caixa = new Caixa(10, 20, 30);
6: 7: Console.WriteLine("Valores iniciais");
8: Console.WriteLine("Largura: " + caixa[0]);
9: Console.WriteLine("Altura: " + caixa[1]);
10: Console.WriteLine("Comprimento: " + caixa[2]);
11: 12: caixa[0] = 40; 13: caixa[1] = 50; 14: caixa[2] = 60; 15: 16: Console.WriteLine("\nValores mudados e acessados com indexador do tipo int");
17: Console.WriteLine("Largura: " + caixa[0]);
18: Console.WriteLine("Altura: " + caixa[1]);
19: Console.WriteLine("Comprimento: " + caixa[2]);
20: 21: caixa["largura"] = 70;
22: caixa["altura"] = 80;
23: caixa["comprimento"] = 90;
24: 25: Console.WriteLine("\nValores mudados e acessados com indexadir do tipo string");
26: Console.WriteLine("Largura: " + caixa["largura"]);
27: Console.WriteLine("Altura: " + caixa["altura"]);
28: Console.WriteLine("Comprimento: " + caixa["comprimento"]);
29: 30: Console.ReadLine(); 31: } 32: }
Nenhum comentário:
Postar um comentário