Eigenschaften statt schreibgeschützter Variablen

Das .NET Framework kennt schreibgeschützte Variablen als Alternative zu Konstanten. Während der Wert von Konstanten bereits bei der Kompilierung bekannt sein muss, können schreibgeschützte Variablen zur Laufzeit im Konstruktor initialisiert werden (oder natürlich auch inline).

Variablen veränderlicher Verweistypen

Eine Variable kann unabhängig vom Datentyp als schreibgeschützt gekennzeichnet werden. Der Schreibschutz ist für Werttypen nach der Erzeugung garantiert. Für Variablen von Verweistypen bezieht sich der Schreibschutz lediglich auf die in der Variablen gespeicherten Referenz. Array-Referenzen können zwar als schreibgeschützt gekennzeichnet werden, dennoch ist es möglich, die im Array gespeicherten Elemente auszutauschen.

Es wird empfohlen, Verweistypen nur dann als schreibgeschützt zu kennzeichnen, wenn diese aufgrund ihrer Implementierung tatsächlich auch schreibgeschützt sind. Beispielsweise handelt es sich bei der Klasse String um einen solchen unveränderlichen Verweistyp.

Öffentliche, schreibgeschützte Variablen im Vergleich zu Eigenschaften

Microsoft FxCop erzeugt für öffentliche Variablen generell die Meldung "Do not declare visible instance fields".

Es ist möglich, diese Meldung per Quellcode wie folgt zu unterdrücken. Allerdings muss momentan ein entsprechendes Attribut für jedes einzelne Feld hinzugefügt werden. Die Attributklasse SuppressMessageAttribute funktioniert nur im Zusammenhang mit der Compiler-Option "CODE_ANALYSIS".

[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
public readonly string UserName;

Auch wenn es möglich ist, die FxCop-Meldung zu unterdrücken, sollte die Frage nach dem Sinn dieser Meldung gestellt werden.

Im Hinblick auf die Robustheit von Bibliotheken sind öffentliche Eigenschaften öffentlichen Variablen vorzuziehen. Wird aus einer schreibgeschützten Eigenschaft eine veränderliche Eigenschaft, bleibt die Schnittstelle der Bibliothek kompatibel. Gleiches gilt für Variablen. Die Änderung einer schreibgeschützten Variablen zu einer Eigenschaft ist jedoch nicht kompatibel.

Ähnliche Artikel

Schreiben Sie einen Kommentar