Indexadores em interfaces (guia de programação translation from VPE for Csharp)

Os indexadores podem ser declarados em um interface (translation from VPE for Csharp Reference). Acessadores de interface indexadores diferem dos acessadores de classe indexadores das seguintes maneiras:

  • Acessadores de interface não usam modificadores.

  • Um acessador de interface não tem um corpo.

Assim, o objetivo o acessador é indicar se o indexador é leitura-gravar, somente leitura ou somente gravar.

Este é um exemplo de um acessador do indexador de interface:

public interface ISomeInterface
{
    //...

    // Indexer declaration:
    string this[int index]
    {
        get;
        set;
    }
}

A assinatura de um indexador deve diferem das assinaturas de todos os outros indexadores declaradas na interface do mesma.

Exemplo

O exemplo a seguir mostra como implementar a interface indexadores.

// Indexer on an interface:
public interface ISomeInterface
{
    // Indexer declaration:
    int this[int index]
    {
        get;
        set;
    }
}

// Implementing the interface.
class IndexerClass : ISomeInterface
{
    private int[] arr = new int[100];
    public int this[int index]   // indexer declaration
    {
        get
        {   
            // The arr object will throw IndexOutOfRange exception.
            return arr[index];
        }
        set
        {               
            arr[index] = value;                
        }
    }
}

class MainClass
{
    static void Main()
    {
        IndexerClass test = new IndexerClass();
        // Call the indexer to initialize the elements #2 and #5.
        test[2] = 4;
        test[5] = 32;
        for (int i = 0; i <= 10; i++)
        {
            System.Console.WriteLine("Element #{0} = {1}", i, test[i]);
        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
/* Output:
    Element #0 = 56.2
    Element #1 = 56.7
    Element #2 = 56.5
    Element #3 = 58.3
    Element #4 = 58.8
    Element #5 = 60.1
    Element #6 = 65.9
    Element #7 = 62.1
    Element #8 = 59.2
    Element #9 = 57.5
*/

No exemplo anterior, você poderia usar a implementação de membro interface explícita usando o nome totalmente qualificado do membro de interface.Por exemplo:

public string ISomeInterface.this 
{ 
} 

No entanto, o nome totalmente qualificado só é necessário para evitar ambigüidade quando a classe está implementando a mais de uma interface com a mesma assinatura do indexador.Por exemplo, se um Employee classe é implementar duas interfaces, ICitizen e IEmployee, e ambas as interfaces têm a mesma assinatura do indexador, a implementação de membro interface explícita é necessária. Ou seja, a seguinte declaração do indexador:

public string IEmployee.this 
{ 
} 

implementa o indexador no IEmployee interface, enquanto a declaração a seguir:

public string ICitizen.this 
{ 
} 

implementa o indexador no ICitizen interface.

Consulte também

Tarefas

Exemplo de indexadores

Conceitos

Guia de Programação C#

Referência

Indexadores (guia de programação C#)

Propriedades (Guia de programação do C#)

Interfaces (guia de programação C#)