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, CharDate, 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 = Nothingexemple : . 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.

Voir aussi