Ich mag die Fähigkeit, einen Indexer zu haben, ohne einen direkten Verweis auf den "indexierten" Gegenstand auszugeben. Ich schrieb eine einfache „Rückruf“ unter Indexer Klasse ...
R = die zurückTyp aus dem Indexer P = der übergebene Typ in den Indexer
das All Indexer wirklich tut, ist die Vorgänge passieren zu der Deployer und ermöglichen ihnen zu verwalten, was tatsächlich passiert und wird zurückgegeben.
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();
}
}
}
Um es in einem Programm oder Klasse zu verwenden:
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);
}
funktioniert wie ein Champion vor allem, wenn Sie den Zugriff auf Ihre Liste überwachen möchten oder besondere Operationen tun, wenn etwas zugegriffen wird.
Welche Verwendungssyntax möchten Sie? Obj [i] sieht aus wie es mit dem Vergleich obj mit T in Konflikt wäre, obj [i] ist besser, aber ich finde es schwer zu lesen. Meine Präferenz ist obj [ ich], aber nicht viel. –
Ich verstehe nicht, warum wir nicht nur eine generische Methode verwenden möchten. Es ist sauberer, IMO, da das Hinzufügen von Generics zu Indizes zu schwer lesbarem Code führen würde. – William