Hiçbir anahtar sözcük (Visual Basic)

Herhangi bir veri türünün varsayılan değerini temsil eder. Başvuru türleri için varsayılan değer başvurudur null . Değer türleri için varsayılan değer, değer türünün null atanabilir olup olmamasına bağlıdır.

Not

Boş değer atanamayan değer türleri Nothing için Visual Basic'te C# dilinden null farklıdır. Visual Basic'te, null atanamayan bir değer türünün değişkenini olarak Nothingayarlarsanız, değişken bildirilen türü için varsayılan değere ayarlanır. C# dilinde, null atanamayan değer türünde nullbir değişken atarsanız derleme zamanı hatası oluşur.

Açıklamalar

Nothing bir veri türünün varsayılan değerini temsil eder. Varsayılan değer, değişkenin bir değer türünde mi yoksa başvuru türünde mi olduğuna bağlıdır.

Bir değer türünün değişkeni doğrudan değerini içerir. Değer türleri tüm sayısal veri türlerini, Boolean, Char, Date, tüm yapıları ve tüm numaralandırmaları içerir. Bir başvuru türünün değişkeni, nesnenin bir örneğine başvuruyu bellekte depolar. Başvuru türleri sınıflar, diziler, temsilciler ve dizeler içerir. Daha fazla bilgi için bkz . Değer Türleri ve Başvuru Türleri.

Değişken bir değer türündeyse, öğesinin Nothing davranışı değişkenin null atanabilir bir veri türünde olup olmadığına bağlıdır. Null değer türünü temsil etmek için tür adına bir ? değiştirici ekleyin. Null atanabilir bir değişken atanarak Nothing değeri olarak nullayarlanır. Daha fazla bilgi ve örnek için bkz . Null Atanabilir Değer Türleri.

Değişken null atanamaz bir değer türündeyse, değişkenin atanması Nothing bunu bildirilen türü için varsayılan değere ayarlar. Bu tür değişken üyeleri içeriyorsa, hepsi varsayılan değerlerine ayarlanır. Aşağıdaki örnekte skaler türler için bu gösterilmektedir.

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

Değişken bir başvuru türündeyse, değişkene atamak Nothing değişkenin türünün başvurusuna null ayarlar. Başvuruya ayarlanmış bir null değişken hiçbir nesneyle ilişkilendirilmemiştir. Aşağıdaki örnek bunu gösterir:

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

Başvuru (veya null atanabilir değer türü) değişkeninin olup nullolmadığını denetlemek için her zaman veya IsNot NothingkullanınIs Nothing. = Nothing veya <> Nothing kullanmayın.

Visual Basic'teki dizeler için boş dize eşittir Nothing. Bu nedenle doğrudur "" = Nothing . Bu durum, dizelerle çalışırken doğru karşılaştırmayı seçmenizi özellikle önemli hale getirir. Boş olmayan bir değerin ayarlanıp ayarlanmadığını belirtse myString = NothingmyString <> Nothing de, bu amaçla kullanılmasını String.IsNullOrEmpty(myString) kesinlikle öneririz. boş dize de dahil olmak üzere herhangi bir değerin ayarlanıp ayarlanmadığını belirlemek için ve IsNot Nothing kullanınIs Nothing.

Aşağıdaki örnekte ve IsNot işleçlerini kullanan Is karşılaştırmalar gösterilmektedir:

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

Yan tümcesi kullanmadan As bir değişken bildirir ve olarak Nothingayarlarsanız değişkeninin Objecttürü vardır. Bunun bir örneğidir Dim something = Nothing. Bu durumda, açık ve Option Infer kapalı olduğunda Option Strict bir derleme zamanı hatası oluşur.

Bir nesne değişkenine atadığınızda Nothing , artık herhangi bir nesne örneğine başvuramaz. Değişken daha önce bir örneğe başvuruda bulunduysa, değişkenin Nothing olarak ayarlanması örneğin kendisini sonlandırmaz. Örnek sonlandırılır ve bununla ilişkili bellek ve sistem kaynakları yalnızca çöp toplayıcı (GC) etkin başvurunun kalmadığını algıladıktan sonra serbest bırakılır.

Nothing , başlatılmamış bir değişken veya var olmayan bir veritabanı sütununu temsil eden nesneden DBNull farklıdır.

Ayrıca bkz.