const Wörterbuch in c #

8

Ich habe eine Klasse in C #, die ein Dictionary enthält, das ich erstellen möchte und sicherstellen, dass nichts hinzugefügt, bearbeitet oder aus diesem Wörterbuch entfernt wird, solange die Klasse, die es enthält, existiert.

readonly hilft nicht wirklich, sobald ich getestet und gesehen habe, dass ich Gegenstände nachher hinzufügen kann. Ich habe zum Beispiel ein Beispiel erstellt:

%Vor%

Ich möchte, dass die Add-Methode nicht funktioniert. Wenn möglich, möchte ich es nicht einmal kompilieren. Irgendwelche Vorschläge?

Eigentlich mache ich mir Sorgen, dass es Code ist, der vielen Menschen offen steht, sich zu ändern. Also, auch wenn ich die Add-Methode verberge, ist es möglich, dass jemand "unschuldig" eine Methode erstellt, die einen Schlüssel hinzufügt oder einen anderen entfernt. Ich möchte, dass die Leute schauen und wissen, dass sie das Wörterbuch in keiner Weise ändern sollten. Genau wie ich mit einer const-Variable habe.

    
Samuel Carrijo 12.05.2009, 16:51
quelle

10 Antworten

12

Es gibt nichts im .NET Framework, das Ihnen hier hilft, aber dieser Beitrag gibt eine ziemlich gute Implementierung eines generischen ReadOnlyDictionary in C #. Es implementiert alle Schnittstellen, die Sie erwarten könnten ( IDictionary , ICollection , IEnumerable , usw.) und als Bonus wird die gesamte Klasse und ihre Mitglieder vollständig mit XML kommentiert.

(Ich habe davon Abstand genommen, den Code hier zu posten, weil er mit all den XML-Kommentaren ziemlich lang ist.)

    
Noldorin 12.05.2009, 16:57
quelle
7

Verstecke das Wörterbuch total. Stellen Sie einfach eine get-Methode für die DictContainer-Klasse bereit, die Elemente aus dem Wörterbuch abruft.

%Vor%     
Neil Barnwell 12.05.2009 16:56
quelle
3

Eh ... dann definiere nicht die Add-Methode ...

Behalten Sie die Variable myDictionary privat und setzen Sie einen Getter / Indexer frei, so dass er nur von außerhalb dieser Klasse gelesen werden kann.

fragt sich, ob er den Punkt vollständig vermisst

    
Eoin Campbell 12.05.2009 16:56
quelle
1

Es gibt keine integrierte Möglichkeit, dies zu tun. Ziehen Sie eine Wrapperklasse in Betracht. >

    
arul 12.05.2009 16:56
quelle
1

Es gibt jetzt eine Möglichkeit, eine schreibgeschützte Sammlung zu implementieren, die für die Klasse statisch ist. Hier ist mein Code:

%Vor%

Ich hoffe, das hilft.

    
Shafiq Jetha 09.06.2013 22:41
quelle
0
%Vor%

zum Hinzufügen von benutzerdefinierten Elementen;

%Vor%     
Tolgahan Albayrak 12.05.2009 17:17
quelle
0

und das ist ein anderer Weg

%Vor%     
Tolgahan Albayrak 12.05.2009 17:21
quelle
0

Ich mochte den Link von bruno-conde , das war ein einfacheres, aber ich kann seinen Kommentar nicht als Antwort markieren Ich werde Noldorin als offizielle Antwort markieren, denn es ist eine ähnliche und befriedigende Antwort.

Schade, dass es keine Möglichkeit gibt, die Kompilierung des Codes zu verhindern :(. Danke, Leute

    
Samuel Carrijo 13.05.2009 11:52
quelle
0

Hier ist eine bessere Alternative, wie ich es beschrieben habe:

Ссылка ..

Im Wesentlichen ist es eine viel einfachere Lösung, ReadOnlyCollection abzuleiten, wodurch die Arbeit auf elegantere Weise erledigt wird.

    
SoftwareRockstar 30.10.2010 05:35
quelle
0

Zu Ihrer Information, jetzt ist es in .net 4.5 integriert.

Ссылка

    
batbaatar 11.11.2014 21:52
quelle