ReadOnly (Visual Basic)
Určuje, že proměnnou nebo vlastnost lze číst, ale nikoli zapsat.
Poznámky
Pravidla
Kontext deklarace Můžete použít
ReadOnlypouze na úrovni modulu. To znamená, že kontext deklarace proReadOnlyprvek 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
ReadOnlyspolečně sStaticve stejné deklaraci.Přiřazení hodnoty. Kód, který spotřebovává
ReadOnlyvlastnost, 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
ReadOnlypromě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: