ReadOnly (Visual Basic)

Określa, że zmienna lub właściwość może być odczytywana, ale nie zapisywana.

Uwagi

Reguły

  • Kontekst deklaracji. Można używać ReadOnly tylko na poziomie modułu. Oznacza to, że kontekst deklaracji elementu ReadOnly musi być klasą, strukturą lub modułem i nie może być plikiem źródłowym, przestrzenią nazw lub procedurą.

  • Modyfikatory połączone. Nie można określić ReadOnly razem z Static tą samą deklaracją.

  • Przypisywanie wartości. Kod zużywając ReadOnly właściwość nie może ustawić jej wartości. Jednak kod, który ma dostęp do bazowego magazynu, może w dowolnym momencie przypisać lub zmienić wartość.

    Wartość można przypisać do zmiennej ReadOnly tylko w jej deklaracji lub konstruktorze klasy lub struktury, w której jest zdefiniowana.

Kiedy używać zmiennej ReadOnly

Istnieją sytuacje, w których nie można użyć instrukcji Const do deklarowania i przypisywania stałej wartości. Na przykład instrukcja może nie akceptować typu danych, Const który chcesz przypisać, lub może nie być w stanie obliczyć wartości w czasie kompilacji za pomocą wyrażenia stałego. Możesz nawet nie znać wartości w czasie kompilacji. W takich przypadkach można użyć zmiennej ReadOnly do przechowywania stałej wartości.

Ważne

Jeśli typ danych zmiennej jest typem odwołania, takim jak tablica lub wystąpienie klasy, jego składowe można zmienić nawet wtedy, gdy zmienna to ReadOnly. Ilustruje to poniższy przykład.

ReadOnly characterArray() As Char = {"x"c, "y"c, "z"c}
Sub ChangeArrayElement()
    characterArray(1) = "M"c
End Sub

Po zainicjowaniu tablica wskazywana przez characterArray() wartości "x", "y" i "z". Ponieważ zmienna characterArray to ReadOnly, nie można zmienić jej wartości po zainicjowaniu; oznacza to, że nie można przypisać do niej nowej tablicy. Można jednak zmienić wartości co najmniej jednego elementu członkowskiego tablicy. Po wywołaniu procedury ChangeArrayElementtablica wskazywana przez characterArray() blokady "x", "M" i "z".

Należy pamiętać, że jest to podobne do deklarowania parametru procedury o wartości ByVal, co uniemożliwia samej procedurze zmianę samego argumentu wywołującego, ale umożliwia zmianę jego składowych.

Przykład

W poniższym przykładzie zdefiniowano ReadOnly właściwość dla daty, w której pracownik został zatrudniony. Klasa przechowuje wartość właściwości wewnętrznie jako zmienną Private , a tylko kod wewnątrz klasy może zmienić wartość. Jednak właściwość to Public, a każdy kod, który może uzyskać dostęp do klasy, może odczytać właściwość .

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

Modyfikator ReadOnly może być używany w następujących kontekstach:

Zobacz też