Ich habe eine Diskussion darüber gesehen, dass keine Arrays für öffentliche Eigenschaften verwendet werden.
Ich habe die MyStrings2
Convention verwendet. Gibt es einen Grund, warum ich stattdessen MyStrings1
verwenden sollte?
Kurz gesagt: Ich denke, Ihre Frage wird von Jon Skeet - ReadOnlyCollection oder IEnumerable zum Freigeben von Mitgliederauflistungen?
Zusätzlich:
Sie können nur AsReadOnly()
emulieren:
AKTUALISIEREN :
Dies erstellt keine Kopie von list
. ReadOnlyCollection
kopiert die Daten nicht, es funktioniert direkt auf der mitgelieferten Liste. Siehe Dokumentation :
Eine schreibgeschützte Sammlung ist einfach eine Sammlung mit einem Wrapper, der das Ändern der Sammlung verhindert. Wenn Änderungen an der zugrunde liegenden Sammlung vorgenommen werden, spiegelt die schreibgeschützte Sammlung diese Änderungen daher wider.
Dieser Konstruktor ist eine O (1) -Operation.
Das direkte Verfügbarmachen des Arrays für diejenigen, die es verwenden, bedeutet, dass sie es modifizieren können - dies ist eine Verletzung der Kapselung und des Versteckens von Daten.
Dies kann ein Problem sein, wenn Ihre Klasse einige Invarianten hat (garantiert, was sie tut und welche Daten sie enthält), da sie nicht garantieren kann, dass andere Klassen ihre Interna willy nilly ändern können.
In einer Multithread-Umgebung ist dies ein noch größeres Problem, da ein Thread Änderungen an den Daten vornehmen kann, während ein anderer versucht, Daten zu lesen - Sie können leicht inkonsistente Daten in verschiedenen Threads erhalten.