Megosztás a következőn keresztül:


Semmi kulcsszó (Visual Basic)

Bármely adattípus alapértelmezett értékét jelöli. Referenciatípusok esetén az alapértelmezett érték a null hivatkozás. Értéktípusok esetén az alapértelmezett érték attól függ, hogy az értéktípus null értékű-e.

Feljegyzés

Nem null értékű értéktípusok Nothing esetén a Visual Basicben eltér a C#-tól null . A Visual Basicben, ha nem null értékű Nothingváltozót állít be, a változó a deklarált típus alapértelmezett értékére van állítva. C#-ban, ha nem null értékű nullváltozót rendel hozzá, fordítási időhiba lép fel.

Megjegyzések

Nothing egy adattípus alapértelmezett értékét jelöli. Az alapértelmezett érték attól függ, hogy a változó értéktípusú vagy hivatkozástípusú-e.

Egy értéktípusú változó közvetlenül tartalmazza az értékét. Az értéktípusok közé tartozik az összes numerikus adattípus, Booleana , Char, Dateaz összes struktúra és az összes számbavétel. Egy referenciatípus változója az objektum egy példányára mutató hivatkozást tárol a memóriában. A referenciatípusok közé tartoznak az osztályok, tömbök, meghatalmazottak és sztringek. További információ: Értéktípusok és referenciatípusok.

Ha egy változó érték típusú, a változó viselkedése Nothing attól függ, hogy a változó null értékű adattípus-e. Ha null értékű típust szeretne jelölni, adjon hozzá egy ? módosítót a típusnévhez. A null értékű változóhoz való Nothing hozzárendelés a következő értékre nullállítja az értéket: . További információkért és példákért lásd : Null értékű típusok.

Ha egy változó olyan értéktípusú, amely nem null értékű, a hozzá rendelés Nothing a deklarált típus alapértelmezett értékére állítja. Ha ez a típus változótagokat tartalmaz, mindegyik az alapértelmezett értékre van állítva. Az alábbi példa a skaláris típusok esetében szemlélteti ezt.

Module Module1

    Sub Main()
        Dim ts As TestStruct
        Dim i As Integer
        Dim b As Boolean

        ' The following statement sets ts.Name to null and ts.Number to 0.
        ts = Nothing

        ' The following statements set i to 0 and b to False.
        i = Nothing
        b = Nothing

        Console.WriteLine($"ts.Name: {ts.Name}")
        Console.WriteLine($"ts.Number: {ts.Number}")
        Console.WriteLine($"i: {i}")
        Console.WriteLine($"b: {b}")

        Console.ReadKey()
    End Sub

    Public Structure TestStruct
        Public Name As String
        Public Number As Integer
    End Structure
End Module

Ha egy változó referenciatípusú, a változóhoz való hozzárendelés Nothing a változó típusának hivatkozására null állítja. Egy hivatkozásra null beállított változó nincs objektumhoz társítva. Az alábbi példa a következőket mutatja be:

Module Module1

    Sub Main()

        Dim testObject As Object
        ' The following statement sets testObject so that it does not refer to
        ' any instance.
        testObject = Nothing

        Dim tc As New TestClass
        tc = Nothing
        ' The fields of tc cannot be accessed. The following statement causes 
        ' a NullReferenceException at run time. (Compare to the assignment of
        ' Nothing to structure ts in the previous example.)
        'Console.WriteLine(tc.Field1)

    End Sub

    Class TestClass
        Public Field1 As Integer
        ' . . .
    End Class
End Module

Annak ellenőrzéséhez, hogy egy hivatkozási (vagy null értékű) változó mindig nullhasználható-e Is Nothing vagy IsNot Nothing. Ne használja = Nothing vagy <> Nothing.

A Visual Basicben lévő sztringek esetében az üres sztring egyenlő Nothing. "" = Nothing Ezért igaz. Ez a tény különösen fontos, hogy a sztringek használatakor a megfelelő összehasonlítást válassza. Bár myString = Nothing , és myString <> Nothing jelzi, hogy be van-e állítva egy nem üres érték, határozottan javasoljuk, hogy erre a célra használja String.IsNullOrEmpty(myString) . Használja Is Nothing és IsNot Nothing határozza meg, hogy egy üres sztringet is tartalmazó érték be van-e állítva.

Az alábbi példa azokat az összehasonlításokat mutatja be, amelyek az operátorokat és IsNot az Is operátorokat használják:

Module Module1
    Sub Main()

        Dim testObject As Object
        testObject = Nothing
        Console.WriteLine(testObject Is Nothing)
        ' Output: True

        Dim tc As New TestClass
        tc = Nothing
        Console.WriteLine(tc IsNot Nothing)
        ' Output: False

        ' Declare a nullable value type.
        Dim n? As Integer
        Console.WriteLine(n Is Nothing)
        ' Output: True

        n = 4
        Console.WriteLine(n Is Nothing)
        ' Output: False

        n = Nothing
        Console.WriteLine(n IsNot Nothing)
        ' Output: False

        Console.ReadKey()
    End Sub

    Class TestClass
        Public Field1 As Integer
        Private field2 As Boolean
    End Class
End Module

Ha záradék használata As nélkül deklarál egy változót, és azt állítja ObjectbeNothing, a változó típusa . Erre példa a .Dim something = Nothing Ebben az esetben fordítási időhiba lép fel, ha Option Strict be van kapcsolva és Option Infer ki van kapcsolva.

Amikor Nothing hozzárendel egy objektumváltozót, az már nem hivatkozik objektumpéldányra. Ha a változó korábban egy példányra hivatkozott, a beállítás Nothing nem állítja le magát a példányt. A példány leáll, és a hozzá tartozó memória- és rendszererőforrások felszabadulnak, csak azután, hogy a szemétgyűjtő (GC) észleli, hogy nincsenek aktív hivatkozások.

Nothing különbözik az DBNull objektumtól, amely nem inicializált változatot vagy nem létező adatbázisoszlopot jelöl.

Lásd még