Nur zweidimensionales Array in C # lesen

9

Gibt es eine etablierte Möglichkeit, ein schreibgeschütztes 2-d Array in C # zurückzugeben?

Ich weiß ReadOnlyCollection ist das Richtige für ein 1-d-Array und ich bin froh, meine eigene Wrapper-Klasse zu schreiben, die ein this[] {get} implementiert. Aber ich will das Rad nicht neu erfinden, wenn dieses Rad schon existiert.

    
sblom 18.04.2012, 21:11
quelle

2 Antworten

1

Es gibt nur eine Möglichkeit, dies zu simulieren.

Sie müssen Ihre eigene Klasse mit einem privaten Array erstellen.

Die ähnlichste Implementierung eines Arrays ist ein Indexer:

Der Link '10 .8 'zeigt die Simulation eines zweidimensionalen Arrays.

Wenn Sie den Indexer nur mit einem Getter implementieren, kann der Benutzer die Elemente nur lesen, aber nicht schreiben. Wenn jedoch jedes Element ein Objekt (Referenztyp) ist, können Sie die Änderung der Eigenschaften des aufgerufenen Objekts nicht verhindern.

Es gibt jedoch mehrere Möglichkeiten, "schreibgeschützte" Objekte zu simulieren:

  • Erstellen Sie eine Wrapper-Klasse, die die Eigenschaften jedes Elements im Array als schreibgeschützte Eigenschaften verfügbar macht, sodass sie nicht geändert werden können (
  • )
  • Verwenden primitiver Werttypen (wie int )
  • Beseitigen der Änderungen durch Zurückgeben einer Kopie des Elements in dem privaten Array anstelle des ursprünglichen Elements in dem privaten Array, so dass die Änderungen, die an dem Objekt vorgenommen werden, das ursprüngliche Objekt in dem Array nicht beeinflussen.

In anderen Sprachen wie C ++ gibt es Referenzen und Zeiger auf konstante Werte, aber diese existiert nicht in C #.

    
JotaBe 18.04.2012, 21:43
quelle
3

Leider gibt es keine eingebaute Implementierung, um einen Fall zu bearbeiten, nach dem Sie fragen. Aber eine einfache Implementierung allein sollte nicht schwierig sein.

Der einzige Gedanke, ich hoffe Sie wissen, dass Sie eine readonly Sammlung , aber nicht Elemente innerhalb dieser Sammlung tun werden.

Hoffe, das hilft.

    
Tigran 18.04.2012 21:16
quelle

Tags und Links