Nothing-Schlüsselwort (Visual Basic)

Stellt den Standardwert eines beliebigen Datentyps dar. Bei Verweistypen ist der Standardwert der null Verweis. Bei Werttypen hängt der Standardwert davon ab, ob der Werttyp NULL-Werte zulasst.

Hinweis

Bei Werttypen ohne NULL-Werte Nothing unterscheidet sich in Visual Basic von in null C#. Wenn Sie in Visual Basic eine Variable eines Werttyps festlegen, der keine NULL-Werte zu Nothing enthält, auf , wird die Variable auf den Standardwert für ihren deklarierten Typ festgelegt. Wenn Sie in C# eine Variable eines Werttyps zuweisen, der keine NULL-Werte null zuweist, tritt ein Kompilierzeitfehler auf.

Bemerkungen

Nothing stellt den Standardwert eines Datentyps dar. Der Standardwert hängt davon ab, ob die Variable einen Werttyp oder einen Verweistyp aufwies.

Eine Variable eines Werttyps enthält ihren Wert direkt. Werttypen umfassen alle numerischen Datentypen, Boolean , , , alle Strukturen und alle Char Date Enumerationen. Eine Variable eines Verweistyps speichert einen Verweis auf eine Instanz des Objekts im Arbeitsspeicher. Zu den Verweistypen gehören Klassen, Arrays, Delegaten und Zeichenfolgen. Weitere Informationen finden Sie unter Werttypen und Verweistypen.

Wenn eine Variable einen Werttyp aufwies, hängt das Verhalten von Nothing davon ab, ob die Variable einen Nullable-Datentyp aufwies. Um einen Nullable-Werttyp darzustellen, fügen Sie dem Typnamen einen ? Modifizierer hinzu. Durch zuweisen Nothing zu einer Variablen, die NULL-Werte zuweist, wird der Wert auf null festgelegt. Weitere Informationen und Beispiele finden Sie unter Nullable Value Types.

Wenn eine Variable einen Werttyp aufweist, der keine NULL-Werte zuweist, wird sie durch zuweisen Nothing auf den Standardwert für ihren deklarierten Typ festgelegt. Wenn dieser Typ Variablenmember enthält, werden alle auf ihre Standardwerte festgelegt. Im folgenden Beispiel wird dies für skalare Typen veranschaulicht.

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

Wenn eine Variable einen Verweistyp aufweist, wird sie durch zuweisen Nothing auf einen Verweis des null Variablentyps festgelegt. Eine Variable, die auf einen Verweis festgelegt null ist, ist keinem -Objekt zugeordnet. Dies wird im folgenden Beispiel veranschaulicht:

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

Wenn Sie überprüfen, ob eine Verweisvariable (oder ein Nullable-Werttyp) eine Variable null ist, verwenden Sie nicht = Nothing oder <> Nothing . Verwenden Sie immer Is Nothing oder IsNot Nothing .

Für Zeichenfolgen in Visual Basic entspricht die leere Zeichenfolge Nothing . Daher "" = Nothing ist "true".

Das folgende Beispiel zeigt Vergleiche, die die Is Operatoren und IsNot verwenden:

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

Wenn Sie eine Variable deklarieren, ohne eine As -Klausel zu verwenden, und sie auf Nothing festlegen, hat die Variable den Typ Object . Ein Beispiel hierfür ist Dim something = Nothing . Ein Kompilierzeitfehler tritt in diesem Fall auf, wenn Option Strict eingeschaltet ist und Option Infer deaktiviert ist.

Wenn Sie Nothing einer Objektvariablen zuweisen, bezieht sie sich nicht mehr auf eine Objektinstanz. Wenn die Variable zuvor auf eine Instanz verwiesen hat, wird die Instanz selbst nicht beendet, wenn sie auf festgelegt Nothing wurde. Die Instanz wird beendet, und die zugeordneten Arbeitsspeicher- und Systemressourcen werden erst freigegeben, nachdem der Garbage Collector (GC) erkennt, dass keine aktiven Verweise mehr vorhanden sind.

Nothing unterscheidet sich vom DBNull -Objekt, das eine nicht initialisierte Variante oder eine nicht vorhandene Datenbankspalte darstellt.

Siehe auch