Поделиться через


Nothing (Visual Basic)

Представляет значение по умолчанию любого типа данных.Для ссылочных типов значение по умолчанию null ссылка.Для типов значений, зависят от значений по умолчанию, является ли тип значения null.

ПримечаниеПримечание

Для типов значений, не допускающие значения null Nothing в Visual Basic отличается от null в c#.В Visual Basic, если нужно задать переменную типа значения null Nothingпеременная имеет значение по умолчанию для своего объявленного типа.В c# при присвоении переменной значения типа null nullвозникает ошибка времени компиляции.

Заметки

Nothing представляет значение по умолчанию для типа данных.Зависит от значений по умолчанию, является ли переменная типа значения или ссылочного типа.

Переменная a тип значения непосредственно содержащий его значение.Типы значений включают все числовые типы данных Boolean" Char" Dateвсе структуры и перечисления.Переменная a ссылочный тип хранит ссылку на экземпляр объекта в памяти.Ссылочные типы включают классы, массивы, делегаты и строки.Дополнительные сведения см. в разделе Типы значений и ссылочные типы.

Если переменная типа значения, то применяются расширения функциональности Nothing зависит от того, является ли переменная типа данных значения null.Для представления значения null тип значения, добавьте a ? модификатор к имени типа.Присвоить Nothing присваивает значение переменной значение null null.Дополнительные сведения и примеры см. в разделе Типы значения, допускающие Null (Visual Basic).

Если переменная типа значения, не допускает значения null, присвоить Nothing на него задается значение по умолчанию для своего объявленного типа.Если тип содержит элементы переменных, для них задаются соответствующие значения по умолчанию.Следующий пример иллюстрирует это для скалярных типов.

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

Если переменная ссылочного типа, то присвоить Nothing к переменным наборам его к a null ссылка на тип переменной.Переменная, которой присваивается a null ссылка не связана с любым объектом.Это показано в приведенном ниже примере.

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

Проверяющий, является ли переменная ссылки или типа значения (null) nullне используйте = Nothing OR <> Nothing.Всегда пользуйтесь Is Nothing OR IsNot Nothing.

Для строк в Visual Basic, равно пустой строке Nothing.Следовательно, "" = Nothing - true.

В следующем примере показаны сравнения с использованием операторов Is и 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

Если объявить переменную без использования предложения As и задать ей значение Nothing, переменная имеет тип Object.Примером этого является Dim something = Nothing.Ошибка времени компиляции в этом случае при возникновении Option Strict и Option Infer .

При присвоении объектной переменной ключевого слова Nothing она больше не ссылается на какой-либо экземпляр объекта.Если переменная ранее содержала ссылку на экземпляр, задание ключевого слова Nothing не удаляет экземпляр как таковой.Использование экземпляра прекращается, и связанные с ним память и системные ресурсы освобождаются только после того, как сборщик мусора (GC) обнаружит, что не осталось активных ссылок на экземпляр.

Nothing отличается от DBNull объект, который представляет неинициализированных версий или несуществующий столбец базы данных.

См. также

Ссылки

Оператор Dim (Visual Basic)

Оператор Is (Visual Basic)

Оператор IsNot (Visual Basic)

Основные понятия

Время существования: создание и уничтожение объектов (Visual Basic)

Время существования в Visual Basic

Типы значения, допускающие Null (Visual Basic)