Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Bármely adattípus alapértelmezett értékét jelöli. Referenciatípusok esetén az alapértelmezett érték a null hivatkozás. Értéktípusok esetén az alapértelmezett érték attól függ, hogy az értéktípus null értékű-e.
Megjegyzés:
Nem null értékű értéktípusok Nothing esetén a Visual Basicben eltér a C#-tól null . A Visual Basicben, ha nem null értékű Nothingváltozót állít be, a változó a deklarált típus alapértelmezett értékére van állítva. C#-ban, ha nem null értékű nullváltozót rendel hozzá, fordítási időhiba lép fel.
Megjegyzések
Nothing egy adattípus alapértelmezett értékét jelöli. Az alapértelmezett érték attól függ, hogy a változó értéktípusú vagy hivatkozástípusú-e.
Egy értéktípusú változó közvetlenül tartalmazza az értékét. Az értéktípusok közé tartozik az összes numerikus adattípus, Booleana , Char, Dateaz összes struktúra és az összes számbavétel. Egy referenciatípus változója az objektum egy példányára mutató hivatkozást tárol a memóriában. A referenciatípusok közé tartoznak az osztályok, tömbök, meghatalmazottak és sztringek. További információ: Értéktípusok és referenciatípusok.
Ha egy változó érték típusú, a változó viselkedése Nothing attól függ, hogy a változó null értékű adattípus-e. Ha null értékű típust szeretne jelölni, adjon hozzá egy ? módosítót a típusnévhez. A null értékű változóhoz való Nothing hozzárendelés a következő értékre nullállítja az értéket: . További információkért és példákért lásd: Null értékű típusok.
Ha egy változó olyan értéktípusú, amely nem null értékű, a hozzá rendelés Nothing a deklarált típus alapértelmezett értékére állítja. Ha ez a típus változótagokat tartalmaz, mindegyik az alapértelmezett értékre van állítva. Az alábbi példa a skaláris típusok esetében szemlélteti ezt.
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
Ha egy változó referenciatípusú, a változóhoz való hozzárendelés Nothing a változó típusának hivatkozására null állítja. Egy hivatkozásra null beállított változó nincs objektumhoz társítva. Az alábbi példa a következőket mutatja be:
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
Annak ellenőrzéséhez, hogy egy hivatkozási (vagy null értékű) változó mindig nullhasználható-e Is Nothing vagy IsNot Nothing. Ne használjon = Nothing vagy <> Nothing.
A Visual Basicben lévő sztringek esetében az üres sztring egyenlő Nothing.
"" = Nothing Ezért igaz. Ez a tény különösen fontos, hogy a sztringek használatakor a megfelelő összehasonlítást válassza. Bár myString = Nothing , és myString <> Nothing jelzi, hogy be van-e állítva egy nem üres érték, határozottan javasoljuk, hogy erre a célra használja String.IsNullOrEmpty(myString) . Használja Is Nothing és IsNot Nothing határozza meg, hogy egy üres sztringet is tartalmazó érték be van-e állítva.
Az alábbi példa azokat az összehasonlításokat mutatja be, amelyek az operátorokat és IsNot az Is operátorokat használják:
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
Ha záradék használata As nélkül deklarál egy változót, és azt állítja ObjectbeNothing, a változó típusa . Erre példa a .Dim something = Nothing Ebben az esetben fordítási időhiba lép fel, ha Option Strict be van kapcsolva és Option Infer ki van kapcsolva.
Amikor Nothing hozzárendel egy objektumváltozót, az már nem hivatkozik objektumpéldányra. Ha a változó korábban egy példányra hivatkozott, a beállítás Nothing nem állítja le magát a példányt. A példány leáll, és a hozzá tartozó memória- és rendszererőforrások felszabadulnak, csak azután, hogy a szemétgyűjtő (GC) észleli, hogy nincsenek aktív hivatkozások.
Nothing különbözik az DBNull objektumtól, amely nem inicializált változatot vagy nem létező adatbázisoszlopot jelöl.