Freigeben über


ReadOnly (Visual Basic)

Gibt an, dass eine Variable oder Eigenschaft gelesen werden kann, jedoch kein Schreibvorgang möglich ist.

Bemerkungen

Regeln

  • Deklarationskontext. Sie können ReadOnly nur auf Modulebene verwenden. Der Deklarationskontext für ein ReadOnly-Element muss demnach eine Klasse, Struktur oder ein Modul sein und darf keine Quelldatei, kein Namespace und keine Prozedur sein.

  • Kombinierte Modifizierer. ReadOnly kann nicht zusammen mit Static in der gleichen Deklaration angegeben werden.

  • Zuweisen eines Werts. Code, der eine ReadOnly-Eigenschaft verwendet, kann ihren Wert nicht festlegen. Code, der Zugriff auf den zugrunde liegenden Speicher hat, kann den Wert jedoch jederzeit zuweisen oder ändern.

    Sie können einer ReadOnly-Variablen nur in ihrer Deklaration oder im Konstruktor einer Klasse oder Struktur, in der sie definiert ist, einen Wert zuweisen.

Wann sollte eine ReadOnly-Variable verwendet werden?

Es gibt Situationen, in denen Sie keine Const-Anweisung verwenden können, um einen konstanten Wert zu deklarieren und zuzuweisen. Beispielsweise akzeptiert die Const-Anweisung möglicherweise nicht den Datentyp, den Sie zuweisen möchten, oder Sie können den Wert zur Kompilierzeit nicht mit einem konstanten Ausdruck berechnen. Möglicherweise kennen Sie den Wert zur Kompilierzeit nicht einmal. In diesen Fällen können Sie eine ReadOnly-Variable verwenden, um einen konstanten Wert zu halten.

Wichtig

Wenn der Datentyp der Variablen ein Verweistyp ist, z. B. ein Array oder eine Klasseninstanz, können ihre Member geändert werden, auch wenn die Variable selbst ReadOnly ist. 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

Bei der Initialisierung enthält das Array, auf das mit characterArray() verwiesen wird, „x“, „y“ und „z“. Da die Variable characterArrayReadOnly ist, können Sie ihren Wert nach der Initialisierung nicht mehr ändern. Das heißt, Sie können ihr kein neues Array zuweisen. Sie können jedoch die Werte eines oder mehrerer Arraymember ändern. Nach einem Aufruf der Prozedur ChangeArrayElement enthält das Array, auf das mit characterArray() verwiesen wird, „x“, „M“ und „z“.

Beachten Sie, dass dies dem Deklarieren eines Prozedurparameters als ByVal ähnelt. Dadurch wird verhindert, dass die Prozedur das aufrufende Argument selbst ändert, ihre Member jedoch ändern kann.

Beispiel

Im folgenden Beispiel wird eine ReadOnly-Eigenschaft für das Datum definiert, an dem ein Mitarbeiter eingestellt wurde. Die Klasse speichert den Eigenschaftswert intern als Private-Variable und nur Code innerhalb der Klasse kann diesen Wert ändern. Die Eigenschaft ist jedoch Public 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 folgenden Kontexten verwendet werden:

Siehe auch