Os indexadores permitem indexar uma instância de estrutura ou classe como se fosse um array. Assim é possível acessar uma lista de elementos pelo nome do objeto e um índice, desta forma nome_objeto[índice]. Em arrays convencionais o índice é sempre um valor inteiro, enquanto os indexadores aceitam qualquer tipo de objeto como índice.
A declaração dos indexadores é semelhante a das propriedades das classes, porém não é possível definir um nome para estes, usando-se sempre a palavra chave “this”. Veja um exemplo de uso de indexadores, extraído do MSDN, para ficar mais claro:
class TempRecord
{
// Array of temperature values
private float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F, 61.3F, 65.9F, 62.1F, 59.2F, 57.5F };
// To enable client code to validate input
// when accessing your indexer.
public int Length
{
get { return temps.Length; }
}
// Indexer declaration.
// If index is out of range, the temps array will throw the exception.
public float this[int index]
{
get
{
return temps[index];
}
set
{
temps[index] = value;
}
}
}
class MainClass
{
static void Main()
{
TempRecord tempRecord = new TempRecord();
// Use the indexer's set accessor
tempRecord[3] = 58.3F;
tempRecord[5] = 60.1F;
// Use the indexer's get accessor
for (int i = 0; i < 10; i++)
{
System.Console.WriteLine("Element #{0} = {1}", i, tempRecord[i]);
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
Na classe Temprecord temos uma lista com valores numéricos (float) , uma propriedade que retorna o tamanho do array e o indexador. Agora repare na classe MainClass, na forma como são setados e lidos os valores da instância de Temprecord. O objeto é tratado como se fosse um array. Isto se deve graças ao indexador.
Para saber mais sobre indexadores, dê uma lida na documentação do MSDN.
0 comentários:
Postar um comentário