Mot clé Nothing (Visual Basic)
Représente la valeur par défaut de n’importe quel type de données. Pour les types référence, la valeur par défaut est la null
référence. Pour les types valeur, la valeur par défaut varie selon que le type de valeur peut être null.
Notes
Pour les types de valeurs non nullables, Nothing
en Visual Basic diffère de null
en C#. En Visual Basic, si vous définissez une variable d’un type de valeur non nullable sur Nothing
, la variable est définie sur la valeur par défaut pour son type déclaré. En C#, si vous affectez une variable d’un type valeur non nullable à null
, une erreur de compilation se produit.
Notes
Nothing
représente la valeur par défaut d’un type de données. La valeur par défaut varie selon que la variable est d’un type valeur ou d’un type référence.
Une variable d’un type valeur contient directement sa valeur. Les types valeur incluent tous les types de données numériques, Boolean
, Char
Date
, toutes les structures et toutes les énumérations. Une variable d’un type référence stocke une référence à une instance de l’objet en mémoire. Les types de référence incluent des classes, des tableaux, des délégués et des chaînes. Pour plus d'informations, consultez Value Types and Reference Types.
Si une variable est d’un type valeur, le comportement de Nothing
dépend si la variable est d’un type de données nullable. Pour représenter un type valeur nullable, ajoutez un ?
modificateur au nom de type. L’affectation Nothing
à une variable nullable définit la valeur sur null
. Pour plus d’informations et d’exemples, consultez Types de valeurs nullables.
Si une variable est d’un type valeur qui ne peut pas avoir la valeur Null, son affectation Nothing
la définit sur la valeur par défaut pour son type déclaré. Si ce type contient des membres variables, ils sont tous définis sur leurs valeurs par défaut. L’exemple suivant illustre cela pour les types scalaires.
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 une variable est d’un type référence, l’affectation Nothing
à la variable la définit sur une null
référence du type de la variable. Une variable définie sur une null
référence n’est associée à aucun objet. Cela est illustré par l'exemple suivant :
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
Lorsque vous vérifiez si une variable de référence (ou de type valeur Nullable) est null
, n’utilisez = Nothing
pas ou <> Nothing
. Is Nothing
Utilisez toujours ou IsNot Nothing
.
Pour les chaînes en Visual Basic, la chaîne vide est égale à Nothing
. Par conséquent, "" = Nothing
est vrai.
L’exemple suivant montre des comparaisons qui utilisent les Is
opérateurs et 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 vous déclarez une variable sans utiliser de As
clause et que vous lui attribuez la valeur Nothing
, la variable a un type de Object
. En voici un Dim something = Nothing
exemple : . Une erreur de compilation se produit dans ce cas lorsque Option Strict
est activé et Option Infer
désactivé.
Lorsque vous affectez Nothing
à une variable objet, elle ne fait référence à aucune instance d’objet. Si la variable avait précédemment fait référence à une instance, sa Nothing
définition sur n’arrête pas l’instance elle-même. L’instance est terminée et la mémoire et les ressources système qui lui sont associées sont libérées, uniquement après que le récupérateur de mémoire (GC) a détecté qu’il ne reste plus de références actives.
Nothing
diffère de l’objet DBNull , qui représente une variante non initialisée ou une colonne de base de données inexistante.