Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Indexadores en C#: Haciendo que los objetos actúen como arrays

Un indexador permite que un objeto sea indexado como un array. Cuando define un indexador para una clase, esta se comporta de forma similar a un array virtual. Puede acceder a la instancia de esta clase usando el operador de acceso a array ([ ]).

Sintaxis

Un indexador unidimensional tiene la siguiente sintaxis:

tipo_elemento this[int índice] {
    // Accesor get
    get {
        // devuelve el valor especificado por índice
    }
    // Accesor set
    set {
        // establece el valor especificado por índice
    }
}

Uso de indexadores

La declaración del comportamiento de un indexador es similar a una propiedad. Se usan get y set para definirlo. Sin embargo, las propiedades devuelven o establecen un miembro de datos específico, mientras que los indexadores devuelven o establecen un valor particular de la instancia del objeto. Rompen los datos de la instancia en partes más pequeñas e indexan cada parte.

Definir una propiedad implica dar un nombre. Los indexadores no se definen con nombres, sino con la palabra clave this, que se refiere a la instancia del objeto.

Ejemplo:

using System;
namespace AplicaciónIndexador {
    class NombresIndexados {
        private string[] listaNombres = new string[tamaño];
        static public int tamaño = 10;
        
        public NombresIndexados() {
            for (int i = 0; i < tamaño; i++)
                listaNombres[i] = "N. A.";
        }
        
        public string this[int índice] {
            get {
                string tmp;
                if (índice >= 0 && índice <= tamaño - 1) {
                    tmp = listaNombres[índice];
                } else {
                    tmp = "";
                }
                return tmp;
            }
            set {
                if (índice >= 0 && índice <= tamaño - 1) {
                    listaNombres[índice] = value;
                }
            }
        }
        
        static void Main(string[] args) {
            NombresIndexados nombres = new NombresIndexados();
            nombres[0] = "Zara";
            nombres[1] = "Riz";
            nombres[2] = "Nuha";
            nombres[3] = "Asif";
            nombres[4] = "Davinder";
            nombres[5] = "Sunil";
            nombres[6] = "Rubic";
            
            for (int i = 0; i < NombresIndexados.tamaño; i++) {
                Console.WriteLine(nombres[i]);
            }
            Console.ReadKey();
        }
    }
}

Resultado:

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.

Indexadores sobrecargados

Los indexadores pueden sobrecargarse. También pueden declararse con múltiples parámetros, cada uno de tipo diferente. No es necesario que los índices sean enteros; C# permite índices de otros tipos, como string.

Ejemplo: Indexadores sobrecargados

using System;
namespace AplicaciónIndexador {
    class NombresIndexados {
        private string[] listaNombres = new string[tamaño];
        static public int tamaño = 10;
        
        public NombresIndexados() {
            for (int i = 0; i < tamaño; i++)
                listaNombres[i] = "N. A.";
        }
        
        public string this[int índice] {
            get {
                string tmp;
                if (índice >= 0 && índice <= tamaño - 1)
                    tmp = listaNombres[índice];
                else
                    tmp = "";
                return tmp;
            }
            set {
                if (índice >= 0 && índice <= tamaño - 1)
                    listaNombres[índice] = value;
            }
        }
        
        public int this[string nombre] {
            get {
                int índice = 0;
                while (índice < tamaño) {
                    if (listaNombres[índice] == nombre)
                        return índice;
                    índice++;
                }
                return índice;
            }
        }
        
        static void Main(string[] args) {
            NombresIndexados nombres = new NombresIndexados();
            nombres[0] = "Zara";
            nombres[1] = "Riz";
            nombres[2] = "Nuha";
            nombres[3] = "Asif";
            nombres[4] = "Davinder";
            nombres[5] = "Sunil";
            nombres[6] = "Rubic";
            
            // Usando el primer indexador con parámetro int
            for (int i = 0; i < NombresIndexados.tamaño; i++)
                Console.WriteLine(nombres[i]);
            
            // Usando el segundo indexador con parámetro string
            Console.WriteLine(nombres["Nuha"]);
            Console.ReadKey();
        }
    }
}

Resultado:

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.
2

Lenguaje C

  1. C# Hola Mundo – Construyendo su primera aplicación en C#
  2. Entendiendo palabras clave e identificadores en C#: Reglas, listas y mejores prácticas
  3. Domine variables y tipos de datos primitivos en C#: Guía completa
  4. Operadores en C# – Guía completa de operadores en C#
  5. Dominando operadores bit a bit y de desplazamiento en C#: Guía completa
  6. Fundamentos de C#: Entrada y salida esenciales
  7. Expresiones, sentencias y bloques en C#: Guía completa con ejemplos prácticos
  8. Dominando los comentarios en C#: Tipos, mejores prácticas y documentación XML
  9. Dominando la sentencia switch en C#: Sintaxis, ejemplos y mejores prácticas
  10. Operador ternario en C#: Guía concisa para expresiones condicionales
  11. Sentencia break en C#: Cómo y cuándo usarla