;

segunda-feira, 7 de fevereiro de 2011

Indexadores

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