Wie kann ich die [] Operatoren überladen?

8

Ich erstelle eine Klasse, die ein Wörterbuch als privates Mitglied auffüllt. Ich möchte die Werte des Wörterbuchs freilegen, ohne das Wörterbuch selbst zu exponieren (schreibgeschützt). Ich kann leicht eine Eigenschaft erstellen, um _dictionary.Keys freizugeben, aber wie kann ich [] überladen, so dass MyClass[key] % zurückgibt co_de%?

Ich denke, ich muss vielleicht eine Schnittstelle implementieren, aber ich bin mir nicht sicher, welche ...

    
dlras2 18.05.2010, 16:12
quelle

2 Antworten

23

Ich bin mir ziemlich sicher, dass Sie danach suchen:

%Vor%

Wenn Sie eine Schnittstelle implementieren möchten, um dem Client-Code anzuzeigen, dass auf Ihre Klasse von einem Index vom Typ TKey zugegriffen werden kann, ist die kleinste Übereinstimmung (die ich kenne) IDictionary<TKey, TValue> .

Leider hat IDictionary<TKey, TValue> eine ganze Reihe von Membern, die Ihre schreibgeschützte Anforderung verletzen, was bedeutet, dass Sie viele Mitglieder explizit implementieren müssen, um ein NotImplementedException (oder ein solches) zu werfen, wenn sie aufgerufen werden: Nämlich, der Setter für this , Add , Clear und Remove .

Vielleicht gibt es eine andere Schnittstelle, die für diesen Zweck besser geeignet wäre (etwas wie IReadOnlyDictionary<TKey, TValue> ?); Ich bin einfach nicht darauf gestoßen.

Sie können natürlich auch Ihre eigene -Schnittstelle schreiben, wenn Sie mehrere Klassen haben möchten, die ähnliche Funktionen bieten.

    
Dan Tao 18.05.2010, 16:13
quelle
4

Dies wird als Indexer bezeichnet. Siehe Ссылка

    
Alex 18.05.2010 16:15
quelle