Klíčové slovo Nothing (Visual Basic)
Představuje výchozí hodnotu libovolného datového typu. Výchozí hodnotou pro odkazové typy je null
odkaz. U typů hodnot závisí výchozí hodnota na tom, jestli je typ hodnoty null.
Poznámka:
U nenulových hodnotových typů Nothing
se v jazyce Visual Basic liší od null
jazyka C#. Pokud v jazyce Visual Basic nastavíte proměnnou nenulového typu Nothing
hodnoty na hodnotu , proměnná je nastavena na výchozí hodnotu pro jeho deklarovaný typ. Pokud v jazyce C# přiřadíte proměnnou nenulového typu hodnoty , dojde k null
chybě v době kompilace.
Poznámky
Nothing
představuje výchozí hodnotu datového typu. Výchozí hodnota závisí na tom, zda je proměnná typu hodnoty nebo odkazového typu.
Proměnná typu hodnoty přímo obsahuje její hodnotu. Hodnotové typy zahrnují všechny číselné datové typy, , Boolean
Char
, Date
, všechny struktury a všechny výčty. Proměnná typu odkazu ukládá odkaz na instanci objektu v paměti. Odkazové typy zahrnují třídy, pole, delegáty a řetězce. Další informace naleznete v tématu Typy hodnot a odkazové typy.
Pokud je proměnná typu hodnoty, chování Nothing
závisí na tom, zda je proměnná datového typu s možnou hodnotou null. Chcete-li reprezentovat typ hodnoty null, přidejte ?
do názvu typu modifikátor. Přiřazení Nothing
proměnné s možnou hodnotou null nastaví hodnotu na null
. Další informace a příklady naleznete v tématu Typy hodnot s možnou hodnotou Null.
Pokud je proměnná typu hodnoty, která není nullable, přiřaďte Nothing
ji na výchozí hodnotu pro svůj deklarovaný typ. Pokud tento typ obsahuje členy proměnných, jsou všechny nastaveny na jejich výchozí hodnoty. Následující příklad to ilustruje pro skalární typy.
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
Pokud je proměnná typu odkazu, přiřazování Nothing
proměnné ji nastaví na null
odkaz typu proměnné. Proměnná nastavená na odkaz není přidružena k žádnému null
objektu. Následující příklad ukazuje toto:
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
Chcete-li zkontrolovat, zda je null
proměnná odkazu (nebo typu hodnoty null) , vždy použijte Is Nothing
nebo IsNot Nothing
. Nepoužívejte = Nothing
ani <> Nothing
.
Pro řetězce v jazyce Visual Basic se prázdný řetězec rovná Nothing
. "" = Nothing
Proto platí. Díky této skutečnosti je obzvláště důležité, abyste při práci s řetězci zvolili správné porovnání. I když myString = Nothing
a myString <> Nothing
označuje, zda je nastavena neprázdná hodnota, důrazně doporučujeme použít String.IsNullOrEmpty(myString)
pro tento účel. Použijte Is Nothing
a IsNot Nothing
určete, jestli byla nastavena nějaká hodnota, včetně prázdného řetězce.
Následující příklad ukazuje porovnání, která používají operátory Is
a IsNot
operátory:
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
Pokud deklarujete proměnnou bez použití As
klauzule a nastavíte ji na Nothing
, má proměnná typ Object
. Příkladem je Dim something = Nothing
. V tomto případě dojde k chybě kompilace, když Option Strict
je zapnutá a Option Infer
vypnutá.
Když přiřadíte Nothing
proměnnou objektu, už odkazuje na žádnou instanci objektu. Pokud proměnná dříve odkazovala na instanci, nastavení nenakončí Nothing
samotnou instanci. Instance je ukončena a paměť a systémové prostředky přidružené k ní jsou uvolněny až po zjištění uvolňování paměti (GC), že neexistují žádné aktivní odkazy.
Nothing
se liší od objektu DBNull , který představuje neinicializovanou variantu nebo neexistující databázový sloupec.