C# - Indexadores
Um indexador permite que um objeto seja indexado, como um array. Quando você define um indexador para uma classe, essa classe se comporta de maneira semelhante a um array virtual . Você pode então acessar a instância desta classe usando o operador de acesso ao array ([ ]).
Sintaxe
Um indexador unidimensional tem a seguinte sintaxe -
element-type this[int index] { // The get accessor. get { // return the value specified by index } // The set accessor. set { // set the value specified by index } }
Uso de indexadores
A declaração de comportamento de um indexador é até certo ponto semelhante a uma propriedade. semelhante às propriedades, você usa get e definir acessadores para definir um indexador. No entanto, as propriedades retornam ou definem um membro de dados específico, enquanto os indexadores retornam ou definem um valor específico da instância do objeto. Em outras palavras, ele quebra os dados da instância em partes menores e indexa cada parte, obtém ou define cada parte.
Definir uma propriedade envolve fornecer um nome de propriedade. Os indexadores não são definidos com nomes, mas com o this palavra-chave, que se refere à instância do objeto. O exemplo a seguir demonstra o conceito -
Demonstração ao vivo
using System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { for (int i = 0; i < size; i++) namelist[i] = "N. A."; } public string this[int index] { get { string tmp; if( index >= 0 && index <= size-1 ) { tmp = namelist[index]; } else { tmp = ""; } return ( tmp ); } set { if( index >= 0 && index <= size-1 ) { namelist[index] = value; } } } static void Main(string[] args) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; for ( int i = 0; i < IndexedNames.size; i++ ) { Console.WriteLine(names[i]); } Console.ReadKey(); } } }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A.
Indexadores sobrecarregados
Os indexadores podem estar sobrecarregados. Os indexadores também podem ser declarados com vários parâmetros e cada parâmetro pode ser de um tipo diferente. Não é necessário que os índices sejam inteiros. C# permite que os índices sejam de outros tipos, por exemplo, uma string.
O exemplo a seguir demonstra indexadores sobrecarregados -
Demonstração ao vivo
using System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { for (int i = 0; i < size; i++) { namelist[i] = "N. A."; } } public string this[int index] { get { string tmp; if( index >= 0 && index <= size-1 ) { tmp = namelist[index]; } else { tmp = ""; } return ( tmp ); } set { if( index >= 0 && index <= size-1 ) { namelist[index] = value; } } } public int this[string name] { get { int index = 0; while(index < size) { if (namelist[index] == name) { return index; } index++; } return index; } } static void Main(string[] args) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; //using the first indexer with int parameter for (int i = 0; i < IndexedNames.size; i++) { Console.WriteLine(names[i]); } //using the second indexer with the string parameter Console.WriteLine(names["Nuha"]); Console.ReadKey(); } } }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A. 2
Linguagem C
- C# Hello World - Seu primeiro programa em C#
- Palavras-chave e identificadores C#
- Variáveis C# e tipos de dados (primitivos)
- Operadores C#
- Operadores C# Bitwise e Bit Shift
- Entrada e saída básica em C#
- Expressões, instruções e blocos em C# (com exemplos)
- Comentários em C#
- Instrução C# switch
- C# ternário (? :) Operador