ReadOnlyCollection IEnumerable

8
%Vor%

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?

    
pufferfish 31.12.2012, 17:57
quelle

2 Antworten

13

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:

%Vor%

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.

    
EL Yusubov 31.12.2012, 18:00
quelle
1

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.

    
Oded 31.12.2012 17:59
quelle

Tags und Links