ReadOnly (Visual Basic)
Aktualisiert: November 2007
Legt fest, dass eine Variable oder Eigenschaft schreibgeschützt ist, also nur gelesen, aber nicht geschrieben werden kann.
Hinweise
Regeln
**Deklarationskontext.**ReadOnly kann nur auf Modulebene verwendet werden. Dies bedeutet, dass der Deklarationskontext für ein ReadOnly-Element eine Klasse, eine Struktur oder ein Modul sein muss und keine Quelldatei, kein Namespace und keine Prozedur sein kann.
Kombinierte Modifizierer. Sie können ReadOnly nicht zusammen mit Static in derselben Deklaration angeben.
Zuweisen von Werten. Code, in dem eine ReadOnly-Eigenschaft verwendet wird, kann deren Wert nicht festlegen. Jedoch kann Code, der Zugriff auf den zugrunde liegenden Speicher hat, den Wert jederzeit zuweisen oder ändern.
Sie können einer ReadOnly-Variablen nur in ihrer Deklaration oder im Konstruktor der Klasse oder Struktur, in der sie definiert ist, einen Wert zuweisen.
Verwenden einer ReadOnly-Variablen
Es gibt Situationen, in denen Sie keine Const-Anweisung (Visual Basic) verwenden können, um einen konstanten Wert zu deklarieren und zuzuweisen. Beispielsweise ist es möglich, dass die Const-Anweisung den Datentyp, den Sie zuweisen möchten, nicht akzeptiert, oder dass der Wert während des Kompilierens nicht mit einem konstanten Ausdruck berechnet werden kann. Möglicherweise ist der Wert zur Kompilierungszeit nicht einmal bekannt. In diesen Fällen können Sie eine ReadOnly-Variable zum Speichern eines konstanten Werts verwenden.
Sicherheitshinweis: |
---|
Falls es sich beim Datentyp der Variablen um einen Verweistyp handelt, etwa ein Array oder eine Klasseninstanz, dann können dessen bzw. deren Member auch dann geändert werden, wenn die Variable selbst als ReadOnly deklariert wurde. Dies wird anhand des folgenden Beispiels veranschaulicht: |
ReadOnly characterArray() As Char = {"x"c, "y"c, "z"c}
Sub changeArrayElement()
characterArray(1) = "M"c
End Sub
Nach seiner Initialisierung enthält das Array, auf das characterArray() zeigt, die Werte "x", "y" und "z". Weil die characterArray-Variable als ReadOnly deklariert wurde, können Sie ihren Wert nach ihrer Initialisierung nicht ändern; d. h. Sie können ihr kein anderes Array zuweisen. Sie können jedoch die Werte von einem oder mehreren Arraymember(n) ändern. Nach einem Aufruf der Prozedur changeArrayElement enthält das Array, auf das characterArray() zeigt, die Werte "x", "M" und "z".
Beachten Sie, dass dies der Deklaration eines Prozedurparameters als ByVal ähnlich ist. Diese Deklaration bewirkt, dass die Prozedur zwar nicht das Aufrufargument, aber dessen Member verändern kann.
Beispiel
Im folgenden Beispiel wird eine ReadOnly-Eigenschaft für das Einstellungsdatum eines Mitarbeiters definiert. In der Klasse wird der Eigenschaftenwert intern als Private-Variable gespeichert, und nur Code innerhalb der Klasse kann diesen Wert ändern. Die Eigenschaft ist jedoch als Public deklariert, und jeder Code, der auf die Klasse zugreifen kann, kann die Eigenschaft lesen.
Class employee
' Only code inside class employee can change the value of hireDateValue.
Private hireDateValue As Date
' Any code that can access class employee can read property dateHired.
Public ReadOnly Property dateHired() As Date
Get
Return hireDateValue
End Get
End Property
End Class
Der ReadOnly-Modifizierer kann in den folgenden Kontexten verwendet werden: