¿Cuál es el uso real del indexador en C#?¿Cuál es el uso de Indexers?
Parece bastante confuso ya que soy un nuevo programador de C#. Parece una matriz de objetos pero no lo es.
¿Cuál es el uso real del indexador en C#?¿Cuál es el uso de Indexers?
Parece bastante confuso ya que soy un nuevo programador de C#. Parece una matriz de objetos pero no lo es.
Puede pensar en un indexador como una propiedad que toma un parámetro. Lo que haga con este parámetro depende de usted.
En general, los indexadores se utilizan donde proporciona, bueno, un índice a su objeto tiene sentido.
Por ejemplo, si su objeto trata con colecciones de elementos, poder acceder a ellos usando una sintaxis simple '[]'
tiene sentido porque es simple pensar en ello como una matriz a la que damos la posición del objeto que queremos regreso.
Escribí una entrada en el blog hace un tiempo sobre los aspectos de indexers using reflection.
Uno de los ejemplos que di fue:
using System;
using System.Collections;
public class DayPlanner
{
// We store our indexer values in here
Hashtable _meetings = new System.Collections.Hashtable();
// First indexer
public string this[DateTime date] {
get {
return _meetings[date] as string;
}
set {
_meetings[date] = value;
}
}
// Second indexer, overloads the first
public string this[string datestr] {
get {
return this[DateTime.Parse(datestr)] as string;
}
set {
this[DateTime.Parse(datestr)] = value;
}
}
}
Y entonces se podría utilizar de esta manera:
DayPlanner myDay = new DayPlanner();
myDay[DateTime.Parse("2006/02/03")] = "Lunch";
...
string whatNow = myDay["2006/06/26"];
Eso es sólo para mostrar que puede torcer el propósito de un controlador paso a paso para hacer lo que quiere .
no significa que debiera aunque ... :-)
Cualquier colección en .NET, ya sean ArrayLists o listas genéricas, tienen matrices detrás de las escenas en su estructura subyacente. Los indexadores son simplemente una forma de cambiar cómo funcionan los índices de matriz normales, ya sea al aceptar cadenas como entrada para buscar un objeto correspondiente con esa propiedad, o alguna otra entrada. Pero, de nuevo, debajo de todo ese azúcar sintáctico, sigue siendo una representación de una matriz.
Este article might help explain how custom indexers are made.
En su segundo punto, los enteros son enteros. Si necesita representaciones de caracteres de enumeraciones, está limitado a la manipulación de cadenas, o puede decorate your enums with appropriate attributes para que emitan su cadena o representación de caracteres deseada.
indexadores permiten que las instancias de una clase o estructura a ser indexados al igual que las matrices, que se implementan con mayor frecuencia en los tipos cuyo propósito principal es para encapsular una colección interna o matriz
Un acceso get devuelve un valor y un acceso set asigna un valor:
public T this[int i]
{
get
{
return arr[i];
}
set
{
arr[i] = value;
}
}
Con las enumeraciones, definieron los valores están limitados a un pequeño conjunto de tipos primitivos integrales (byte, sbyte, corta, ushort , int, uint, long, ulong).
El tipo char es también un tipo integral, pero se diferencia de los otros tipos integrales de dos maneras:
No hay conversiones implícitas de otros tipos al tipo char. En particular, aunque los tipos sbyte, byte y ushort tienen rangos de valores que son completamente representables utilizando el tipo de caracteres, las conversiones implícitas de sbyte, byte o ushort to char no existen.
Las constantes del tipo char deben escribirse como literales de caracteres o como literales enteros en combinación con un molde para escribir char. Por ejemplo, (char) 10 es lo mismo que '\ x000A'.
El propósito de un indexador es sólo que funciona como una matriz, pero se especifica el código de lo que ocurre cuando se lee y escribir en el indexador.
Un indexador podría hacer casi cualquier cosa para proporcionar una colección como behviour. Por lo general, hay algún tipo de colección privada a la que le ofrece acceso de lectura o lectura/escritura utilizando el indexador.
Una enumeración no puede utilizar carbón, ya que es el tipo de base, pero se puede usar literales de caracteres para especificar un valor entero:
public enum Characters : int {
Alpha = 'a',
Beta = 'b'
}
Characters.Alpha tendrá el valor 97, y Characters.Alpha.ToString () devolverá la cadena "Alpha". (char) Characters.Alpha da el valor 'a'.
enumeraciones En cuanto, si necesita enumeraciones específicas considere el uso de patrón de seguridad de tipos de enumeración, ver enlace: http://www.javacamp.org/designPattern/enum.html