ReadOnly (Visual Basic)
Určuje, že proměnnou nebo vlastnost lze číst, ale nelze zapsat.
Poznámky
Pravidla
Kontext deklarace Můžete použít
ReadOnly
pouze na úrovni modulu. To znamená, že kontext deklarace prvkuReadOnly
musí být třída, struktura nebo modul a nemůže to být zdrojový soubor, obor názvů nebo procedura.Kombinované modifikátory. Nelze zadat
ReadOnly
společně seStatic
stejnou deklarací.Přiřazení hodnoty Kód využívající
ReadOnly
vlastnost nemůže nastavit jeho hodnotu. Kód, který má přístup k podkladovému úložišti, ale může kdykoli přiřadit nebo změnit hodnotu.Hodnotu
ReadOnly
můžete přiřadit proměnné pouze v její 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 pomocí příkazu Const deklarovat a přiřadit konstantní hodnotu. Příkaz například nemusí přijmout datový typ, Const
který chcete přiřadit, nebo nebudete moct vypočítat hodnotu v době kompilace pomocí konstantního výrazu. Možná ani neznáte hodnotu v době kompilace. V těchto případech můžete proměnnou ReadOnly
použít k uchování konstantní hodnoty.
Důležité
Pokud je datový typ proměnné referenčním typem, například pole nebo instance třídy, mohou být jeho členy změněny i v případě, že samotná proměnná je 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é characterArray()
odkazuje, obsahuje "x", "y" a "z". Protože proměnná characterArray
je ReadOnly
, nemůžete změnit její hodnotu po inicializaci; to znamená, že nemůžete přiřadit nové pole. Můžete ale změnit hodnoty jednoho nebo více členů pole. Po volání procedury ChangeArrayElement
pole, na které characterArray()
odkazuje "x", "M" a "z".
Všimněte si, že se to podobá deklarování parametru procedury byVal, který brání postupu ve změně samotného volajícího argumentu, 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 proměnnou Private
a pouze kód uvnitř třídy může tuto hodnotu změnit. Vlastnost je Public
však 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
ReadOnly
Modifikátor lze použít v těchto kontextech: