Ничего ключевое слово (Visual Basic)
Представляет значение по умолчанию любого типа данных. Для ссылочных типов значение по умолчанию является ссылкой null
. Для типов значений значение по умолчанию зависит от того, допускается ли тип значения NULL.
Примечание.
Для типов значений, не допускающих значение NULL, Nothing
в Visual Basic отличается от null
C#. Если в Visual Basic задана переменная типа Nothing
значения, не допускающего значения NULL, переменная имеет значение по умолчанию для объявленного типа. В C# при назначении переменной типа null
значения, не допускающего значение NULL, возникает ошибка во время компиляции.
Замечания
Nothing
представляет значение по умолчанию типа данных. Значение по умолчанию зависит от того, является ли переменная типом значения или ссылочным типом.
Переменная типа значения непосредственно содержит его значение. Типы значений включают все числовые типы данных, Boolean
, Char
, Date
все структуры и все перечисления. Переменная ссылочного типа сохраняет ссылку на экземпляр объекта в памяти. Ссылочные типы включают классы, массивы, делегаты и строки. Для получения дополнительной информации см. Value Types and Reference Types.
Если переменная имеет тип значения, поведение Nothing
зависит от того, имеет ли переменная тип данных, допускающий значение NULL. Чтобы представить тип значения, допускающий значение NULL, добавьте ?
модификатор в имя типа. При Nothing
назначении переменной, допускающей значение NULL, присваивается значение null
. Дополнительные сведения и примеры см. в разделе "Типы значений, допускающих значение NULL".
Если переменная имеет тип значения, который не имеет значения 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 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
Если переменная имеет ссылочный тип, присвойте Nothing
переменной ссылку null
типа переменной. Переменная, заданная для 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), всегда используйте Is Nothing
илиIsNot Nothing
. Не используйте = Nothing
или <> Nothing
.
Для строк в Visual Basic пустая строка равна Nothing
. "" = Nothing
Поэтому имеет значение true. Этот факт особенно важен для выбора правильного сравнения при работе со строками. Хотя myString = Nothing
и myString <> Nothing
укажите, задано ли непустое значение, настоятельно рекомендуется использовать String.IsNullOrEmpty(myString)
для этой цели. Используйте Is Nothing
и IsNot Nothing
определите, задано ли любое значение, включая пустую строку.
В следующем примере показаны сравнения, использующие операторы и IsNot
операторыIs
:
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
- Object Lifetime: How Objects Are Created and Destroyed (Visual Basic) (Время существования, создание и уничтожение объектов (Visual Basic))
- Время существования в Visual Basic
- Оператор Is
- Оператор IsNot
- Типы значений, допускающие значение NULL