Share via


Indizadores en interfaces (Guía de programación de C#)

Las propiedades se pueden declarar en una interface (Referencia de C#). Los descriptores de acceso de los indizadores de interfaz se diferencian de los descriptores de acceso de los indizadores de clase en los siguientes aspectos:

  • Los descriptores de acceso de interfaz no utilizan modificadores.

  • Un identificador de acceso de interfaz no tiene cuerpo.

Así, el propósito del descriptor de acceso es indicar si el indizador es de lectura y escritura, de sólo lectura o de sólo escritura.

A continuación se muestra un ejemplo de descriptor de acceso de un indizador de interfaz:

public interface ISomeInterface
{
    //... 

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

La firma de un indizador debe ser diferente de las firmas de los demás indizadores declarados en la misma interfaz.

Ejemplo

En el ejemplo siguiente se muestra cómo se implementan indizadores de interfaz:

    // 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();
            System.Random rand = new System.Random();
            // Call the indexer to initialize its elements. 
            for (int i = 0; i < 10; i++)
            {
                test[i] = rand.Next();
            }
            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();
        }
    }
    /* Sample output:
        Element #0 = 360877544
        Element #1 = 327058047
        Element #2 = 1913480832
        Element #3 = 1519039937
        Element #4 = 601472233
        Element #5 = 323352310
        Element #6 = 1422639981
        Element #7 = 1797892494
        Element #8 = 875761049
        Element #9 = 393083859
     */

En el ejemplo anterior, se podría usar la implementación de miembro de interfaz explícito mediante el nombre completo del miembro de interfaz. Por ejemplo:

public string ISomeInterface.this 
{ 
} 

Sin embargo, el nombre completo sólo es necesario para evitar la ambigüedad cuando la clase implementa más de una interfaz con la misma firma de indizador. Por ejemplo, si una clase Employee implementa dos interfaces, ICitizen y IEmployee, y ambas tienen la misma firma de indizador, será necesario implementar explícitamente el miembro de interfaz. Es decir, la siguiente declaración de indizador:

public string IEmployee.this 
{ 
} 

implementa el indizador en la interfaz IEmployee, mientras que la declaración:

public string ICitizen.this 
{ 
} 

implementa el indizador en la interfaz ICitizen.

Vea también

Referencia

Indizadores (Guía de programación de C#)

Propiedades (Guía de programación de C#)

Interfaces (Guía de programación de C#)

Conceptos

Guía de programación de C#