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