Nothing (Visual Basic)

Representa el valor predeterminado de cualquier tipo de datos.para los tipos de referencia, el valor predeterminado es la referencia de null .Para los tipos de valor, el valor predeterminado depende de si el tipo de valor es que acepta valores NULL.

[!NOTA]

Para los tipos de valor que no aceptan valores NULL, Nothing en Visual Basic diferencia de null en C#.En Visual Basic, si establece una variable de un tipo de valor que no aceptan valores NULL a Nothing, la variable se establece el valor predeterminado para el tipo declarado.En C#, si se asigna una variable de un tipo de valor que no aceptan valores NULL a null, se produce un error de compilación.

Comentarios

Nothing representa el valor predeterminado de un tipo de datos.El valor predeterminado depende de si la variable es de un tipo de valor o un tipo de referencia.

una variable de un tipo de valor contiene directamente su valor.los tipos de valor incluyen todos los datos numéricos, Boolean, Char, Date, todas las estructuras, y todas las enumeraciones.Una variable de un tipo de referencia almacena una referencia a una instancia de objeto en memoria.Clases, matrices, delegados, y cadenas de inclusión de los tipos de referencia.Para obtener más información, vea Tipos de valor y tipos de referencia.

Si la variable es de un tipo de valor, el comportamiento de Nothing depende de si la variable es de un tipo de datos acepta valores NULL.Para representar un tipo de valor que acepta valores NULL, agregue un modificador de ? a un nombre de tipo.La asignación Nothing a una variable que establezca el valor en null.Para obtener más información y ejemplos, vea Tipos que admiten valores null (Visual Basic).

Si la variable es de un tipo de valor que no es que acepta valores NULL, la asignación de Nothing ella establecida en el valor predeterminado para el 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

    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)

        Console.ReadKey()
    End Sub

    Public Structure TestStruct
        Public Name As String
        Public Number As Integer
    End Structure
End Module

Si una variable es de un tipo de referencia, asignándolo a Nothing conjuntos variables a una referencia de null del tipo de la variable.Una variable que se establece en una referencia de null no está asociado a ningún objeto.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

Al comprobar si una variable de referencia (o tipo de valor que acepta valores NULL) es null, no utilice = Nothing o <> Nothing.Utilice siempre Is Nothing o IsNot Nothing.

Para las cadenas en Visual Basic, la cadena vacía es Nothing.Por consiguiente, "" = Nothing es true.

En el siguiente ejemplo se muestran comparaciones que usan los operadores Is e 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

Si se declara una variable sin usar una cláusula As y se establece en Nothing, el tipo de la variable es Object.Un ejemplo de esto es Dim something = Nothing.Se produce un error de compilación en este caso Option Strict está y Option Infer está desactivado.

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.

Nothing difiere del objeto de DBNull , que representa una variante inicializado o una columna existente de la base de datos.

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)