Nada (Visual Basic)Nothing (Visual Basic)

Representa o valor padrão de qualquer tipo de dados.Represents the default value of any data type. Para tipos de referência, o valor padrão é o null referência.For reference types, the default value is the null reference. Para tipos de valor, o valor padrão depende se o tipo de valor é anulável.For value types, the default value depends on whether the value type is nullable.

Observação

Para tipos de valor não anulável Nothing no Visual Basic difere null em C#.For non-nullable value types, Nothing in Visual Basic differs from null in C#. No Visual Basic, se você definir uma variável de um tipo de valor não anulável para Nothing, a variável é definida como o valor padrão para seu tipo declarado.In Visual Basic, if you set a variable of a non-nullable value type to Nothing, the variable is set to the default value for its declared type. No C#, se você atribuir uma variável de um tipo de valor não anulável para null, ocorre um erro de tempo de compilação.In C#, if you assign a variable of a non-nullable value type to null, a compile-time error occurs.

ComentáriosRemarks

Nothing representa o valor padrão de um tipo de dados.Nothing represents the default value of a data type. O valor padrão depende se a variável é de um tipo de valor ou de um tipo de referência.The default value depends on whether the variable is of a value type or of a reference type.

Uma variável de um tipo de valor contém diretamente de seu valor.A variable of a value type directly contains its value. Tipos de valor incluem todos os tipos de dados numéricos Boolean, Char, Date, todas as estruturas e todas as enumerações.Value types include all numeric data types, Boolean, Char, Date, all structures, and all enumerations. Uma variável de um tipo de referência armazena uma referência a uma instância do objeto na memória.A variable of a reference type stores a reference to an instance of the object in memory. Tipos de referência incluem classes, matrizes, delegados e cadeias de caracteres.Reference types include classes, arrays, delegates, and strings. Para obter mais informações, consulte tipos de valor e tipos de referência.For more information, see Value Types and Reference Types.

Se uma variável é de um valor de tipo, o comportamento de Nothing depende se a variável é um tipo de dados que permite valor nulo.If a variable is of a value type, the behavior of Nothing depends on whether the variable is of a nullable data type. Para representar um tipo de valor anulável, adicione um ? modificador para o nome do tipo.To represent a nullable value type, add a ? modifier to the type name. Atribuindo Nothing a uma variável que permite valor nula, define o valor como null.Assigning Nothing to a nullable variable sets the value to null. Para obter mais informações e exemplos, consulte tipos de valor anuláveis.For more information and examples, see Nullable Value Types.

Se for uma variável de um tipo de valor que não permite valor nulo, atribuindo Nothing para ele define como o valor padrão para seu tipo declarado.If a variable is of a value type that is not nullable, assigning Nothing to it sets it to the default value for its declared type. Se o tipo contém membros variáveis, eles estão todos definidos para seus valores padrão.If that type contains variable members, they are all set to their default values. O exemplo a seguir ilustra isso para tipos escalares.The following example illustrates this for scalar types.

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

Se for uma variável do tipo de referência, atribuindo Nothing à variável define-a como um null referência do tipo da variável.If a variable is of a reference type, assigning Nothing to the variable sets it to a null reference of the variable's type. Uma variável que é definida como um null referência não está associada a qualquer objeto.A variable that is set to a null reference is not associated with any object. O exemplo a seguir demonstra isso.The following example demonstrates this.

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

Ao verificar se uma referência (ou o tipo de valor anulável) variável é null, não use = Nothing ou <> Nothing.When checking whether a reference (or nullable value type) variable is null, do not use = Nothing or <> Nothing. Sempre use Is Nothing ou IsNot Nothing.Always use Is Nothing or IsNot Nothing.

Para cadeias de caracteres no Visual Basic, a cadeia de caracteres vazia é igual a Nothing.For strings in Visual Basic, the empty string equals Nothing. Portanto, "" = Nothing é verdadeiro.Therefore, "" = Nothing is true.

O exemplo a seguir mostra as comparações que usam o Is e IsNot operadores.The following example shows comparisons that use the Is and IsNot operators.

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

Se você declarar uma variável sem usar um As cláusula e defina-a como Nothing, a variável tem um tipo de Object.If you declare a variable without using an As clause and set it to Nothing, the variable has a type of Object. Um exemplo disso é Dim something = Nothing.An example of this is Dim something = Nothing. Um erro de tempo de compilação ocorre nesse caso, quando Option Strict está em e Option Infer está desativado.A compile-time error occurs in this case when Option Strict is on and Option Infer is off.

Quando você atribui Nothing a uma variável de objeto, ele não se refere a qualquer instância do objeto.When you assign Nothing to an object variable, it no longer refers to any object instance. Se a variável anteriormente se referiu a uma instância, configurando-a como Nothing não encerra a instância em si.If the variable had previously referred to an instance, setting it to Nothing does not terminate the instance itself. A instância será encerrada e os recursos de memória e do sistema associados a ela são liberados somente depois que o coletor de lixo (GC) detecta que há referências ativas restantes.The instance is terminated, and the memory and system resources associated with it are released, only after the garbage collector (GC) detects that there are no active references remaining.

Nothing difere de DBNull objeto que representa um variant não inicializado ou uma coluna de banco de dados inexistente.Nothing differs from the DBNull object, which represents an uninitialized variant or a nonexistent database column.

Consulte tambémSee also