Bagikan melalui


Tidak ada kata kunci (Visual Basic)

Mewakili nilai default dari jenis data apa pun. Untuk jenis referensi, nilai defaultnya adalah null referensi. Untuk jenis nilai, nilai default bergantung pada apakah jenis nilai dapat diubah ke null.

Nota

Untuk jenis nilai yang tidak dapat diubah ke null, Nothing di Visual Basic berbeda dari null dalam C#. Di Visual Basic, jika Anda mengatur variabel jenis Nothingnilai yang tidak dapat diubah ke , variabel diatur ke nilai default untuk jenis yang dideklarasikan. Di C#, jika Anda menetapkan variabel jenis nullnilai yang tidak dapat diubah ke , kesalahan waktu kompilasi terjadi.

Komentar

Nothing mewakili nilai default jenis data. Nilai default tergantung pada apakah variabel adalah jenis nilai atau jenis referensi.

Variabel jenis nilai secara langsung berisi nilainya. Jenis nilai mencakup semua jenis data numerik, Boolean, , DateChar, semua struktur, dan semua enumerasi. Variabel jenis referensi menyimpan referensi ke instans objek dalam memori. Jenis referensi mencakup kelas, array, delegasi, dan string. Untuk informasi selengkapnya, lihat Jenis Nilai dan Jenis Referensi.

Jika variabel adalah jenis nilai, perilaku Nothing tergantung pada apakah variabel tersebut dari jenis data yang dapat diubah ke null. Untuk mewakili jenis nilai nullable, tambahkan ? pengubah ke nama jenis. Menetapkan Nothing ke variabel nullable mengatur nilai ke null. Untuk informasi dan contoh selengkapnya, lihat Jenis Nilai Nullable.

Jika variabel adalah jenis nilai yang tidak dapat diubah ke null, menetapkannya Nothing ke nilai default untuk jenis yang dideklarasikan. Jika jenis tersebut berisi anggota variabel, mereka semua diatur ke nilai default mereka. Contoh berikut mengilustrasikan ini untuk jenis skalar.

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

Jika variabel adalah jenis referensi, menetapkan Nothing ke variabel mengaturnya ke null referensi jenis variabel. Variabel yang diatur ke null referensi tidak terkait dengan objek apa pun. Contoh berikut menunjukkan hal ini:

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

Untuk memeriksa apakah variabel referensi (atau jenis nilai nullable) adalah null, selalu gunakan Is Nothing atau IsNot Nothing. Jangan gunakan = Nothing atau <> Nothing.

Untuk string di Visual Basic, string kosong sama dengan Nothing. Oleh karena itu, "" = Nothing adalah benar. Fakta ini membuatnya sangat penting bahwa Anda memilih perbandingan yang benar ketika Anda bekerja dengan string. Meskipun myString = Nothing dan myString <> Nothing menunjukkan apakah nilai yang tidak kosong ditetapkan, kami sangat menyarankan penggunaan String.IsNullOrEmpty(myString) untuk tujuan ini. Gunakan Is Nothing dan IsNot Nothing untuk menentukan apakah ada nilai, termasuk string kosong, telah diatur.

Contoh berikut menunjukkan perbandingan yang menggunakan Is operator dan IsNot :

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

Jika Anda mendeklarasikan variabel tanpa menggunakan As klausul dan mengaturnya ke Nothing, variabel memiliki jenis Object. Contohnya adalah Dim something = Nothing. Kesalahan waktu kompilasi terjadi dalam kasus ini ketika Option Strict aktif dan Option Infer nonaktif.

Saat Anda menetapkan Nothing ke variabel objek, variabel tersebut tidak lagi merujuk ke instans objek apa pun. Jika variabel sebelumnya merujuk ke instans, mengaturnya agar Nothing tidak mengakhiri instans itu sendiri. Instans dihentikan, dan memori dan sumber daya sistem yang terkait dengannya dirilis, hanya setelah pengumpul sampah (GC) mendeteksi bahwa tidak ada referensi aktif yang tersisa.

Nothing berbeda dari DBNull objek, yang mewakili varian yang tidak diinisialisasi atau kolom database yang tidak ada.

Lihat juga