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 ...
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.
Tags und Links .net c# dictionary interface operator-overloading