Niets trefwoord (Visual Basic)

Vertegenwoordigt de standaardwaarde van een gegevenstype. Voor verwijzingstypen is de standaardwaarde de null verwijzing. Voor waardetypen is de standaardwaarde afhankelijk van of het waardetype nullable is.

Notitie

Voor niet-null-waardetypen Nothing verschilt visual Basic van null C#. Als u in Visual Basic een variabele van een niet-null-waardetype Nothinginstelt op, wordt de variabele ingesteld op de standaardwaarde voor het gedeclareerde type. Als u in C# een variabele van een niet-null-waardetype nulltoewijst, treedt er een compilatietijdfout op.

Opmerkingen

Nothing vertegenwoordigt de standaardwaarde van een gegevenstype. De standaardwaarde is afhankelijk van of de variabele van een waardetype of van een verwijzingstype is.

Een variabele van een waardetype bevat rechtstreeks de waarde. Waardetypen omvatten alle numerieke gegevenstypen, Boolean, , Char, Datealle structuren en alle opsommingen. Een variabele van een verwijzingstype slaat een verwijzing op naar een exemplaar van het object in het geheugen. Referentietypen zijn klassen, matrices, gemachtigden en tekenreeksen. Zie Waardetypen en referentietypen voor meer informatie.

Als een variabele van een waardetype is, hangt het gedrag Nothing ervan af of de variabele van een null-gegevenstype is. Als u een null-waardetype wilt weergeven, voegt u een ? wijzigingsfunctie toe aan de naam van het type. Als Nothing u een null-variabele toewijst, wordt de waarde ingesteld op null. Zie Nullable Value Types voor meer informatie en voorbeelden.

Als een variabele van een waardetype is dat niet nullbaar is, Nothing wordt deze ingesteld op de standaardwaarde voor het gedeclareerde type. Als dat type variabele leden bevat, zijn ze allemaal ingesteld op hun standaardwaarden. In het volgende voorbeeld ziet u dit voor scalaire typen.

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

Als een variabele van een verwijzingstype is, wordt deze door het toewijzen Nothing aan de variabele ingesteld op een null verwijzing van het type van de variabele. Een variabele die is ingesteld op een null verwijzing, is niet gekoppeld aan een object. In het volgende voorbeeld ziet u dit:

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

Als u wilt controleren of een verwijzingsvariabele (of nullable value type) is null, gebruikt Is Nothing u altijd of IsNot Nothing. Gebruik = Nothing of <> Nothing niet.

Voor tekenreeksen in Visual Basic is de lege tekenreeks gelijk aan Nothing. "" = Nothing Daarom is het waar. Dit maakt het vooral belangrijk dat u de juiste vergelijking kiest wanneer u met tekenreeksen werkt. Hoewel myString = Nothing en myString <> Nothing aangeven of een niet-lege waarde is ingesteld, raden we u ten zeerste aan dit doel te gebruiken String.IsNullOrEmpty(myString) . Gebruik Is Nothing en IsNot Nothing om te bepalen of een waarde, inclusief een lege tekenreeks, is ingesteld.

In het volgende voorbeeld ziet u vergelijkingen die gebruikmaken van de Is en IsNot operators:

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

Als u een variabele declareert zonder een As component te gebruiken en deze instelt Nothingop , heeft de variabele een type Object. Een voorbeeld hiervan is Dim something = Nothing. In dit geval treedt er een compilatietijdfout op wanneer Option Strict deze is ingeschakeld en Option Infer is uitgeschakeld.

Wanneer u een objectvariabele toewijst Nothing , verwijst deze niet meer naar een objectexemplaren. Als de variabele eerder naar een exemplaar had verwezen, wordt de instantie zelf niet beëindigd door deze in te Nothing stellen. Het exemplaar wordt beëindigd en het geheugen en de systeembronnen die eraan zijn gekoppeld, worden vrijgegeven, pas nadat de garbagecollector (GC) detecteert dat er geen actieve verwijzingen resteren.

Nothing verschilt van het DBNull object, dat een niet-geïnitialiseerde variant of een niet-bestaande databasekolom vertegenwoordigt.

Zie ook