Saltar al contenido

Sobrecarga de los indexadores en C#

La idea de sobrecargar los indexadores es imbuirlos de múltiples argumentos que nos permitan soportar diferentes tipos de datos. Puedes tener diferentes tipos de índices, no es obligatorio usar siempre int. Los tipos múltiples permiten incorporar flexibilidad y aumentar aún más la tolerancia a los fallos y la robustez de la clase y la aplicación. Para lograrlo, necesitamos declararlo con múltiples parámetros, y cada parámetro debe tener diferentes tipos de datos. La técnica para la sobrecarga es muy similar al método para la sobrecarga. El acto mismo de la sobrecarga es una característica de C# destinada a apoyar uno de los tres pilares de la programación orientada a objetos, o polimorfismo .

Tomemos un ejemplo práctico.

Sobrecarga de los indexadores en C#
Sobrecarga de los indexadores en C#
1234567891011121314151617181920212223242526272829303132333435363738394041 usando el Sistema;namespace ndexers{classProgram{classGuides{privatestring[] _guideNames =newstring[10];publicstringthis[int index]{get{return _guideNames[index]; }set{ _guideNames[index]=valor;}}cadena pública esta [float id]{get{return _guideNames[1];}set{ _guideNames[1]=valor;}}cadena pública esta [doble id]{get{return "This is read only";}set{}}}evitar estáticaMain(string[] args){Guides writtenGuides =newGuides();double k =10. 0; writtenGuides[0]="Written "; writtenGuides[1.0f]="Guides"; Console.WriteLine(writtenGuides[k]); Console.WriteLine(writtenGuides[0]); Console.WriteLine(writtenGuides[0]+ writtenGuides[1.0f]); Console.ReadKey();}}}

csharp

La salida de la aplicación es la siguiente.

123Esto es sólo de lecturaGuías escritas

bash

Veamos lo que está pasando bajo el capó. En nuestras Guías de clase, tenemos tres indexadores. Uno trabaja con el tipo de argumento int, otro con el tipo de argumento float, y el tercero, que es de sólo lectura, trabaja con el tipo de argumento double. Los accesorios de sólo lectura se usan cuando se quiere evitar la modificación de un indexador de un tipo específico. Básicamente, el indexador no está definido, y así es como se hace de sólo lectura. El indexador reacciona a diferentes tipos de índices de forma adecuada, y por eso vemos que el argumento int devuelve Written, el argumento float devuelve la concatenación de los índices int y float-based, y el doble nos notifica que es de sólo lectura.

Finalmente, echemos un vistazo a los indexadores multidimensionales.

12345678910111213141516171819202122232425262728293031323334 usando el Sistema;namespace ndexers{classProgram{classMultiDimensional{privatestring[,] _guideNames =newstring[10,10];publicstringthis[int x,int y]{get{return _guideNames[x,y]; }set{ _guideNames[x,y]=valor;}}}estáticoevitar los principales (string[] args){Multidimensionales laMatriz =nuevaMultidimensional(); laMatriz[0,0]="Daniel"; laMatriz[0,1]="Florian";for(int i =0; i <10; i++){for(int j =0; j <10; j++){if( theMatrix[i,j]==null){Consola. Escriba("N.A.");}else{ Consola.Escriba($"{theMatrix[i,j]} ");}} Consola.WriteLine();} Consola. Leer Clave();}}

csharp

El resultado es el siguiente.

12345678910Daniel Florian N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A.N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A.N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. A. N.A.N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A. N.A.

bash

Aquí tenemos la clase Multidimensional, que implementa una matriz de 10 por 10 que le permite almacenar cadenas basadas en los índices que especifique. No hay nada especial en esto. Funciona como lo harían otras matrices multidimensionales, y la ventaja es el contexto de la clase, que te permite añadir funcionalidad extra. Instanciamos nuestra clase, añadimos algunos elementos, y luego iteramos con anidados para bucles.