Nic kluczowego (Visual Basic)
Reprezentuje wartość domyślną dowolnego typu danych. W przypadku typów referencyjnych wartość domyślna null
to odwołanie. W przypadku typów wartości wartość domyślna zależy od tego, czy typ wartości jest dopuszczalny do wartości null.
Uwaga
W przypadku typów Nothing
wartości innych niż null w Visual Basic różni się od null
w języku C#. W języku Visual Basic, jeśli ustawisz zmienną typu wartości innej niż null na Nothing
wartość , zmienna zostanie ustawiona na wartość domyślną dla zadeklarowanego typu. W języku C#, jeśli przypiszesz zmienną typu wartości innej niż null do null
, wystąpi błąd czasu kompilacji.
Uwagi
Nothing
reprezentuje wartość domyślną typu danych. Wartość domyślna zależy od tego, czy zmienna ma typ wartości, czy typ odwołania.
Zmienna typu wartości bezpośrednio zawiera jego wartość. Typy wartości obejmują wszystkie typy danych liczbowych, Boolean
, , Char
, Date
wszystkie struktury i wszystkie wyliczenia. Zmienna typu odwołania przechowuje odwołanie do wystąpienia obiektu w pamięci. Typy referencyjne obejmują klasy, tablice, delegaty i ciągi. Aby uzyskać więcej informacji, zobacz Typy wartości i typy referencyjne.
Jeśli zmienna jest typu wartości, zachowanie zmiennej Nothing
zależy od tego, czy zmienna ma typ danych dopuszczalny do wartości null. Aby reprezentować typ wartości dopuszczający wartość null, dodaj ?
modyfikator do nazwy typu. Przypisanie Nothing
do zmiennej dopuszczającej wartość null powoduje ustawienie wartości .null
Aby uzyskać więcej informacji i przykładów, zobacz Typy wartości dopuszczanych do wartości null.
Jeśli zmienna jest typu wartości, która nie jest dopuszczana do wartości null, przypisanie Nothing
do niej ustawia wartość domyślną dla zadeklarowanego typu. Jeśli ten typ zawiera elementy członkowskie zmiennych, wszystkie są ustawione na ich wartości domyślne. Poniższy przykład ilustruje to dla typów skalarnych.
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
Jeśli zmienna jest typu odwołania, przypisanie Nothing
do zmiennej ustawia ją na null
odwołanie typu zmiennej. Zmienna ustawiona na odwołanie nie jest skojarzona z żadnym obiektem null
. W poniższym przykładzie pokazano następujące kwestie:
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
Aby sprawdzić, czy zmienna odwołania (lub typu wartości dopuszczanej do wartości null) to null
, zawsze należy użyć Is Nothing
polecenia lub IsNot Nothing
. Nie używaj = Nothing
ani <> Nothing
.
W przypadku ciągów w Visual Basic pusty ciąg jest Nothing
równy . W związku z "" = Nothing
tym to prawda. Ten fakt sprawia, że szczególnie ważne jest wybranie prawidłowego porównania podczas pracy z ciągami. Mimo że myString = Nothing
i myString <> Nothing
wskazuje, czy ustawiono niepustą wartość, zdecydowanie zalecamy użycie String.IsNullOrEmpty(myString)
w tym celu. Użyj Is Nothing
funkcji i IsNot Nothing
, aby określić, czy ustawiono dowolną wartość, w tym pusty ciąg.
W poniższym przykładzie przedstawiono porównania korzystające z Is
operatorów i IsNot
:
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
Jeśli zadeklarowasz zmienną bez użycia klauzuli As
i ustawisz ją na Nothing
, zmienna ma typ Object
. Przykładem tego jest Dim something = Nothing
. W tym przypadku występuje błąd czasu kompilacji, gdy Option Strict
jest włączony i Option Infer
wyłączony.
Po przypisaniu Nothing
do zmiennej obiektu nie odwołuje się ona już do żadnego wystąpienia obiektu. Jeśli zmienna wcześniej odwoływała się do wystąpienia, ustawienie jej na Nothing
wartość nie spowoduje zakończenia samego wystąpienia. Wystąpienie zostanie zakończone, a skojarzone z nim zasoby pamięci i systemu zostaną zwolnione dopiero po wykryciu, że nie ma żadnych aktywnych odwołań.
Nothing
różni się od DBNull obiektu, który reprezentuje niezainicjowany wariant lub nieistniejący kolumna bazy danych.