Nic słowa 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 Visual Basic, jeśli ustawisz zmienną typu wartości innej niż null na Nothingwartość , zmienna zostanie ustawiona na wartość domyślną dla jej 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 zawiera bezpośrednio jej wartość. Typy wartości obejmują wszystkie typy danych liczbowych, Boolean, Char, , Datewszystkie 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 dopuszczanej do wartości 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łady, zobacz Typy wartości dopuszczalnych do wartości null.

Jeśli zmienna jest typem wartości, który nie może mieć 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 to:

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

Podczas sprawdzania, czy zmienna odwołania (lub typu wartości dopuszczanej do wartości null) to null, nie używaj = Nothing wartości lub <> Nothing. Zawsze używaj polecenia Is Nothing lub IsNot Nothing.

W przypadku ciągów w Visual Basic pusty ciąg jest Nothingrówny . W związku z "" = Nothing tym jest to prawda.

W poniższym przykładzie przedstawiono porównania używające 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 zadeklarujesz zmienną bez użycia klauzuli As i ustawisz ją na Nothing, zmienna ma typ Object. Przykładem 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 odniosł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 braku aktywnych odwołań.

Nothing różni się od DBNull obiektu, który reprezentuje niezainicjowany wariant lub nieistniejący kolumna bazy danych.

Zobacz też