ReadOnly (Visual Basic)

Určuje, že proměnnou nebo vlastnost lze číst, ale nikoli zapsat.

Poznámky

Pravidla

  • Kontext deklarace Můžete použít ReadOnly pouze na úrovni modulu. To znamená, že kontext deklarace pro ReadOnly prvek musí být třída, struktura nebo modul a nemůže se jednat o zdrojový soubor, obor názvů nebo proceduru.

  • Kombinované modifikátory. Nelze zadat ReadOnly společně s Static ve stejné deklaraci.

  • Přiřazení hodnoty. Kód, který spotřebovává ReadOnly vlastnost, nemůže nastavit jeho hodnotu. Kód, který má přístup k základnímu úložišti, ale může hodnotu kdykoli přiřadit nebo změnit.

    Můžete přiřadit hodnotu ReadOnly proměnné pouze v deklaraci nebo v konstruktoru třídy nebo struktury, ve které je definována.

Kdy použít proměnnou jen pro čtení

Existují situace, kdy nelze použít příkaz const k deklaraci a přiřazení konstantní hodnoty. Například Const příkaz nemusí přijmout datový typ, který chcete přiřadit, nebo možná nebudete moci vypočítat hodnotu v době kompilace pomocí konstantního výrazu. Nemusíte ani znát hodnotu v době kompilace. V těchto případech můžete použít ReadOnly proměnnou pro uchování konstantní hodnoty.

Důležité

Pokud je datovým typem proměnné odkazový typ, jako je například pole nebo instance třídy, mohou být jeho členové změněny i v případě, že je proměnná sama ReadOnly . Toto dokládá následující příklad.

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

Při inicializaci pole, na které ukazuje, characterArray() obsahuje "x", "y" a "z". Vzhledem k tomu characterArray , že proměnná je ReadOnly , nelze po inicializaci změnit její hodnotu; to znamená, že k ní nelze přiřadit nové pole. Můžete však změnit hodnoty jednoho nebo více členů pole. Po volání procedury se pole, na které se odkazuje, ChangeArrayElement characterArray() drží "x", "M" a "z".

Všimněte si, že je to podobné jako deklarace parametru procedury pro ByVal, což brání postupu v změně samotného argumentu volání, ale umožňuje změnit jeho členy.

Příklad

Následující příklad definuje ReadOnly vlastnost pro datum, kdy byl zaměstnanec přijat. Třída ukládá hodnotu vlastnosti interně jako Private proměnnou a pouze kód uvnitř třídy může tuto hodnotu změnit. Vlastnost je však Public a jakýkoli kód, který má přístup ke třídě, může číst vlastnost.

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

ReadOnlyV těchto kontextech lze použít modifikátor:

Viz také