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 Nothing
instelt op, wordt de variabele ingesteld op de standaardwaarde voor het gedeclareerde type. Als u in C# een variabele van een niet-null-waardetype null
toewijst, 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
, Date
alle 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 Nothing
op , 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.