me gusta la capacidad tener un indexador sin entregar una referencia directa al ítem "indexado". Escribí una clase simple "devolver la llamada" paso a paso a continuación ...
R = el tipo devuelto desde el indexador P = el tipo aprobado en el graduador
Todo el indexador realmente hace es pasar a las operaciones el instalador y les permite administrar lo que realmente ocurre y se devuelve.
public class GeneralIndexer<R,P>
{
// Delegates
public delegate R gen_get(P parm);
public delegate void gen_set(P parm, R value);
public delegate P[] key_get();
// Events
public event gen_get GetEvent;
public event gen_set SetEvent;
public event key_get KeyRequest;
public R this[P parm]
{
get { return GetEvent.Invoke(parm); }
set { SetEvent.Invoke(parm, value); }
}
public P[] Keys
{
get
{
return KeyRequest.Invoke();
}
}
}
para usarlo en un programa o clase:
private GeneralIndexer<TimeSpan, string> TimeIndex = new GeneralIndexer<TimeSpan,string>();
{
TimeIndex.GetEvent += new GeneralIndexer<TimeSpan, string>.gen_get(TimeIndex_GetEvent);
TimeIndex.SetEvent += new GeneralIndexer<TimeSpan, string>.gen_set(TimeIndex_SetEvent);
TimeIndex.KeyRequest += new GeneralIndexer<TimeSpan, string>.key_get(TimeIndex_KeyRequest);
}
obras como un campeón en especial si desea supervisar el acceso a su lista o hacer cualquier operación especial cuando se accede a algo.
¿Qué sintaxis de uso le gustaría? obj [i] parece que entraría en conflicto con la comparación de obj con T, obj [i] es mejor, pero me resulta difícil de leer. Mi preferencia es obj [ i], pero no por mucho. –
No veo por qué no solo queremos usar un método genérico. Es más limpio, IMO, ya que agregar genéricos a los índices daría lugar a código difícil de leer. – William