Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Представляет значение по умолчанию любого типа данных. Для ссылочных типов значение по умолчанию является ссылкой null . Для типов значений значение по умолчанию зависит от того, допускается ли тип значения NULL.
Замечание
Для типов значений, не допускающих значение NULL, Nothing в Visual Basic отличается от null C#. Если в Visual Basic задана переменная типа Nothingзначения, не допускающего значения NULL, переменная имеет значение по умолчанию для объявленного типа. В C# при назначении переменной типа nullзначения, не допускающего значение NULL, возникает ошибка во время компиляции.
Замечания
Nothing представляет значение по умолчанию типа данных. Значение по умолчанию зависит от того, является ли переменная типом значения или ссылочным типом.
Переменная типа значения непосредственно содержит его значение. Типы значений включают все числовые типы данных, Boolean, Char, Dateвсе структуры и все перечисления. Переменная ссылочного типа сохраняет ссылку на экземпляр объекта в памяти. Ссылочные типы включают классы, массивы, делегаты и строки. Дополнительные сведения см. в разделе "Типы значений" и "Ссылочные типы".
Если переменная имеет тип значения, поведение 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), всегда используется nullIs 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 объекта, представляющего неинициализированный вариант или несуществующий столбец базы данных.