모든 데이터 형식의 기본값을 나타냅니다. 참조 형식의 경우 기본값은 참조입니다 null . 값 형식의 경우 기본값은 값 형식이 null 허용 여부에 따라 달라집니다.
비고
null을 허용하지 않는 값 형식 Nothing 의 경우 Visual Basic의 경우 C#의 경우와 null 다릅니다. Visual Basic에서 nullable이 아닌 값 형식의 변수를 Nothing설정하는 경우 변수는 선언된 형식의 기본값으로 설정됩니다. C#에서 nullable이 아닌 값 형식의 변수를 할당하면 null컴파일 시간 오류가 발생합니다.
비고
Nothing 는 데이터 형식의 기본값을 나타냅니다. 기본값은 변수가 값 형식인지 참조 형식인지에 따라 달라집니다.
값 형식의 변수에는 해당 값이 직접 포함됩니다. 값 형식에는 모든 숫자 데이터 형식, Boolean, Char모든 Date구조체 및 모든 열거형이 포함됩니다.
참조 형식의 변수는 메모리에 있는 개체의 인스턴스에 대한 참조를 저장합니다. 참조 형식에는 클래스, 배열, 대리자 및 문자열이 포함됩니다. 자세한 내용은 값 형식 및 참조 형식을 참조하세요.
변수가 값 형식인 경우 변수의 Nothing 동작은 변수가 nullable 데이터 형식인지 여부에 따라 달라집니다. nullable 값 형식을 나타내려면 형식 이름에 ? 한정자를 추가합니다. nullable 변수에 할당하면 Nothing 값이 .로 설정됩니다 null. 자세한 내용 및 예제는 Nullable 값 형식을 참조하세요.
변수가 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
참조(또는 nullable 값 형식) 변수가 null있는지 확인하려면 항상 사용 Is Nothing 하거나 IsNot Nothing.
= Nothing 또는 <> Nothing은 사용하지 마세요.
Visual Basic의 문자열의 경우 빈 문자열은 같습니다 Nothing. 따라서 "" = Nothing true입니다. 이 사실은 문자열을 사용할 때 올바른 비교를 선택하는 것이 특히 중요합니다.
myString <> Nothing 비어있지 않은 값이 설정되었는지 여부를 나타내지만 myString = Nothing 이 용도로 사용하는 String.IsNullOrEmpty(myString) 것이 좋습니다.
IsNot Nothing 빈 문자열을 포함하여 값이 설정되었는지 여부를 확인하고 사용합니다Is 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 Infer 꺼져 있을 때 Option Strict 발생합니다.
개체 변수에 할당 Nothing 하면 더 이상 개체 인스턴스를 참조하지 않습니다. 변수가 이전에 인스턴스를 참조한 경우 해당 변수를 Nothing 설정해도 인스턴스 자체가 종료되지 않습니다. 인스턴스가 종료되고 GC(가비지 수집기)가 활성 참조가 남아 있지 않음을 감지한 후에만 인스턴스와 연결된 메모리 및 시스템 리소스가 해제됩니다.
Nothing 는 DBNull 초기화되지 않은 변형 또는 존재하지 않는 데이터베이스 열을 나타내는 개체와 다릅니다.
참고하십시오
.NET