Nothing (Visual Basic)

Representa el valor predeterminado de cualquier tipo de datos.

Comentarios

Al asignar Nothing a una variable, se establece el valor predeterminado de su tipo declarado. Si ese tipo contiene miembros de variables, se establecen los valores predeterminados de todos ellos. En el ejemplo siguiente se ilustra todo esto para los tipos escalares.

Module Module1
    Public Structure testStruct
        Public name As String
        Public number As Short
    End Structure

    Sub Main()

        Dim ts As testStruct
        Dim i As Integer
        Dim b As Boolean

        ' The following statement sets ts.name to Nothing 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)

    End Sub

End Module

Si la variable es de un tipo de referencia, un valor de Nothing significa que la variable no está asociada a ningún objeto. La variable tiene un valor nulo. En el siguiente ejemplo se muestra cómo.

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

Para probar variables de referencia y de tipo que acepta valores NULL para los valores Nothing, utilice el operador Is o el operador IsNot. Las comparaciones que usan el signo igual, por ejemplo, someVar = Nothing, siempre se evalúan como Nothing. En el siguiente ejemplo se muestran comparaciones que usan los operadores Is e IsNot.

Module Module1
    Sub Main()

        Dim testObject As Object
        testObject = Nothing
        ' The following statement displays "True".
        Console.WriteLine(testObject Is Nothing)

        Dim tc As New TestClass
        tc = Nothing
        ' The following statement displays "False".
        Console.WriteLine(tc IsNot Nothing)

        Dim n? As Integer
        ' The following statement displays "True".
        Console.WriteLine(n Is Nothing)
        n = 4
        ' The following statement displays "False".
        Console.WriteLine(n Is Nothing)
        n = Nothing
        ' The following statement displays "False".
        Console.WriteLine(n IsNot Nothing)

    End Sub

    Class TestClass
        Public field1 As Integer
        Dim field2 As Boolean
    End Class
End Module

Para obtener más información y ejemplos, vea Tipos que admiten valores null (Visual Basic).

Cuando se asigna Nothing a una variable de objeto, ya no hace referencia a una instancia de objeto. Si la variable anteriormente hacía referencia a una instancia, establecer dicha instancia en Nothing no causará la finalización de la misma. Sólo después de que el recolector de elementos no utilizados (GC) detecte que ya no hay referencias activas, la instancia finalizará, y la memoria y los recursos del sistema asociados con ella quedarán liberados.

Vea también

Referencia

Instrucción Dim (Visual Basic)

Is (Operador, Visual Basic)

IsNot (Operador) (Visual Basic)

Conceptos

Duración de los objetos: cómo se crean y destruyen (Visual Basic)

Período de duración en Visual Basic

Tipos que admiten valores null (Visual Basic)