Palabra clave Nothing (Visual Basic)
Representa el valor predeterminado de cualquier tipo de datos. Para los tipos de referencia, el valor predeterminado es la null referencia. Para los tipos de valor, el valor predeterminado depende de si el tipo de valor acepta valores NULL.
Nota
En el caso de los tipos de valor que no aceptan valores NULL, Nothing en Visual Basic difiere de en null C#. En Visual Basic, si establece una variable de un tipo de valor que no acepta valores NULL en , la variable se establece en el valor predeterminado para Nothing su tipo declarado. En C#, si asigna una variable de un tipo de valor que no acepta valores NULL a , se produce un error en tiempo null 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 de un tipo de referencia.
Una variable de un tipo de valor contiene directamente su valor. Los tipos de valor incluyen todos los tipos de datos numéricos, Boolean , , , todas las estructuras y todas las Char Date enumeraciones. Una variable de un tipo de referencia almacena una referencia a una instancia del objeto en memoria. Los tipos de referencia incluyen clases, matrices, delegados y cadenas. Para obtener más información, vea Tipos de valor y Tipos de referencia.
Si una variable es de un tipo de valor, el comportamiento de depende de si la variable es de un tipo de Nothing datos que acepta valores NULL. Para representar un tipo de valor que acepta valores NULL, agregue ? un modificador al nombre del tipo. La Nothing asignación a una variable que acepta valores NULL establece el valor en null . Para obtener más información y ejemplos, vea Tipos de valor que aceptan valores NULL.
Si una variable es de un tipo de valor que no acepta valores NULL, al asignarla se establece en el valor Nothing predeterminado para su tipo declarado. Si ese tipo contiene miembros de variable, todos se establecen en sus valores predeterminados. En el ejemplo siguiente se muestra 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 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
Si una variable es de un tipo de referencia, la asignación a la variable la Nothing establece en una referencia del tipo de la null variable. Una variable establecida en una null referencia no está asociada a ningún objeto. En el siguiente ejemplo se muestra esto:
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 use ni = Nothing <> Nothing . Use siempre Is Nothing o IsNot Nothing .
Para las cadenas Visual Basic, la cadena vacía es igual a Nothing . Por lo tanto, "" = Nothing es true.
En el ejemplo siguiente se muestran comparaciones que usan los Is operadores IsNot y :
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 declara una variable sin usar una As cláusula y la establece en , la variable tiene un tipo de Nothing Object . Un ejemplo de esto es Dim something = Nothing . En este caso, se produce un error en tiempo de compilación cuando Option Strict está on y está Option Infer desactivado.
Cuando se asigna a una variable de objeto, ya no hace referencia a Nothing ninguna instancia de objeto. Si la variable había hecho referencia previamente a una instancia, establecerla en Nothing no finaliza la propia instancia. La instancia finaliza y se liberan la memoria y los recursos del sistema asociados a ella, solo después de que el recolector de elementos no utilizados (GC) detecte que no quedan referencias activas.
Nothing difiere del objeto , que representa una variante sin inicializar o una columna de base de datos DBNull inexistente.