Share via


ReadOnly (Visual Basic)

Anger att en variabel eller egenskap kan läsas men inte skrivas.

Kommentarer

Regler

  • Deklarationskontext. Du kan bara använda ReadOnly på modulnivå. Det innebär att deklarationskontexten för ett ReadOnly element måste vara en klass, struktur eller modul och får inte vara en källfil, ett namnområde eller en procedur.

  • Kombinerade modifierare. Du kan inte ange ReadOnly tillsammans med Static i samma deklaration.

  • Tilldela ett värde. Kod som använder en ReadOnly egenskap kan inte ange dess värde. Men kod som har åtkomst till den underliggande lagringen kan tilldela eller ändra värdet när som helst.

    Du kan endast tilldela ett värde till en ReadOnly variabel i deklarationen eller i konstruktorn för en klass eller struktur där den definieras.

När du ska använda en ReadOnly-variabel

Det finns situationer där du inte kan använda en Const-instruktion för att deklarera och tilldela ett konstant värde. Instruktionen Const kanske till exempel inte accepterar den datatyp som du vill tilldela, eller så kanske du inte kan beräkna värdet vid kompileringstiden med ett konstant uttryck. Du kanske inte ens känner till värdet vid kompileringstiden. I dessa fall kan du använda en ReadOnly variabel för att lagra ett konstant värde.

Viktigt!

Om datatypen för variabeln är en referenstyp, till exempel en matris eller en klassinstans, kan dess medlemmar ändras även om själva variabeln är ReadOnly. I följande exempel visas detta.

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

När matrisen initieras pekar den på med characterArray() "x", "y" och "z". Eftersom variabeln characterArray är ReadOnlykan du inte ändra dess värde när den har initierats. Du kan alltså inte tilldela en ny matris till den. Du kan dock ändra värdena för en eller flera av matrismedlemmarna. Efter ett anrop till proceduren ChangeArrayElementpekar matrisen på med characterArray() rymmer "x", "M" och "z".

Observera att detta liknar att deklarera en procedurparameter som ByVal, vilket förhindrar att proceduren ändrar själva anropsargumentet men tillåter att det ändrar sina medlemmar.

Exempel

I följande exempel definieras en ReadOnly egenskap för det datum då en anställd anställdes. Klassen lagrar egenskapsvärdet internt som en Private variabel, och endast kod i klassen kan ändra det värdet. Egenskapen är Publicdock , och all kod som kan komma åt klassen kan läsa egenskapen.

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

Modifieraren ReadOnly kan användas i följande sammanhang:

Se även