Visual Basic unterstützt zwei Hauptmethoden zur Deklaration unveränderlicher Werte — Const und ReadOnly. Const ist für Compiler-Konstanten gedacht, deren Wert zur Kompilierzeit bekannt ist. ReadOnly erlaubt die Initialisierung nur bei der Deklaration oder im Konstruktor und unterstützt die Unveränderlichkeit zur Laufzeit.
Historisch gesehen, seit VB6 und früher, ermöglichte eine ähnliche Semantik das Vermeiden von magischen Zahlen und erleichterte die Wartung. In VB.NET wurden die Möglichkeiten durch die Einführung von ReadOnly für Instanz- und Klassenfelder erweitert.
Wenn man Const für Werte verwendet, die zur Laufzeit bestimmt werden oder von externen Daten abhängen, können Fehler auftreten. Verwechselte Sichtbarkeiten führen ebenfalls zu Bugs.
Verwenden Sie Const für einfache unveränderliche Werte (Zahlen, Strings), die zum Zeitpunkt der Kompilierung bekannt sind, und ReadOnly für Fälle, in denen der Wert im Konstruktor berechnet werden kann, danach jedoch nur lesbar ist.
Codebeispiel:
Public Class MathConstants Public Const Pi As Double = 3.1415926535 Public ReadOnly Property UtcCreated As DateTime Public Sub New() UtcCreated = DateTime.UtcNow End Sub End Class
Wichtige Merkmale:
Kann man Const für einen zur Laufzeit erhaltenen Wert (z. B. aus einer Datei) deklarieren?
Nein — Const erfordert einen Wert zur Kompilierzeit. Für die Laufzeit-Initialisierung sollte man ReadOnly verwenden.
Kann ein ReadOnly-Feld nach dem Konstruktor geändert werden?
Nein — Änderungen sind nur zum Zeitpunkt der Initialisierung möglich (entweder bei der Deklaration oder im Konstruktor), danach ist es nur lesbar.
Sollte man Const für float/double Zahlen bei mathematischen Berechnungen verwenden?
Ja, wenn der Wert im Voraus bekannt ist. Bei Verwendung in anderen Assemblies würde eine Änderung des Const-Wertes jedoch eine Neubearbeitung aller abhängigen Module erfordern, da der Compiler den Wert direkt einbettet.
Ein Entwickler hat Const für den Pfad zu einem Ordner deklariert, der später in verschiedenen Umgebungen (dev/prod) geändert werden sollte. Infolgedessen musste bei Änderung des Ordners jedes Projekt, das diesen Const verwendet, neu kompiliert werden.
Vorteile:
Nachteile:
ReadOnly für Pfade implementiert, im Konstruktor unter Berücksichtigung der UmgebungsKonfiguration initialisiert. Die Werte lassen sich leicht über Einstellungen ändern, ohne die gesamte Anwendung neu zu kompilieren.
Vorteile:
Nachteile: