Menggunakan Pernyataan (Visual Basic)

Menyatakan awal blok Using dan secara opsional memperoleh sumber daya sistem yang dikontrol blok.

Sintaks

Using { resourcelist | resourceexpression }
    [ statements ]
End Using

Generator

Term Definisi
resourcelist Wajib diisi jika Anda tidak menyediakan resourceexpression. Daftar satu atau lebih sumber daya sistem yang dikontrol blok ini Using, dipisahkan oleh koma.
resourceexpression Wajib diisi jika Anda tidak menyediakan resourcelist. Variabel referensi atau ekspresi yang mengacu pada sumber daya sistem yang akan dikontrol oleh blok Using ini.
statements Opsional. Blok pernyataan yang dijalankan blok Using.
End Using Harus diisi. Mengakhiri definisi blok Using dan membuang semua sumber daya yang dikontrolnya.

Setiap sumber daya dalam bagian resourcelist memiliki sintaks dan bagian berikut:

resourcename As New resourcetype [ ( [ arglist ] ) ]

-atau-

resourcename As resourcetype = resourceexpression

Bagian resourcelist

Term Definisi
resourcename Harus diisi. Variabel referensi yang mengacu pada sumber daya sistem yang dikontrol blok Using.
New Wajib diisi jika pernyataan Using memperoleh sumber daya. Jika Anda telah memperoleh sumber daya, gunakan alternatif sintaks kedua.
resourcetype Harus diisi. Kelas sumber daya. Kelas harus mengimplementasikan antarmuka IDisposable.
arglist Opsional. Daftar argumen yang Anda teruskan ke konstruktor untuk membuat instans resourcetype. Lihat Daftar parameter.
resourceexpression Harus diisi. Variabel atau ekspresi yang mengacu pada sumber daya sistem yang memenuhi persyaratan resourcetype. Jika Anda menggunakan alternatif sintaks kedua, Anda harus memperoleh sumber daya sebelum meneruskan kontrol ke pernyataan Using.

Keterangan

Terkadang kode Anda memerlukan sumber daya yang tidak dikelola, seperti handel file, pembungkus COM, atau koneksi SQL. Blok Using menjamin pembuangan satu atau lebih sumber daya tersebut ketika kode Anda telah selesai menggunakannya. Langkah ini membuatnya tersedia untuk digunakan oleh kode lain.

Sumber daya terkelola dibuang oleh Pengumpul sampah .NET Framework tanpa pengodean tambahan di bagian Anda. Anda tidak memerlukan blok Using untuk sumber daya terkelola. Namun, Anda masih dapat menggunakan blok Using untuk memaksa pembuangan sumber daya terkelola alih-alih menunggu pengumpul sampah.

Blok Using memiliki tiga bagian: akuisisi, penggunaan, dan pembuangan.

  • Akuisisi berarti membuat variabel dan menginisialisasinya untuk merujuk ke sumber daya sistem. Pernyataan Using dapat memperoleh satu atau lebih sumber daya, atau Anda dapat memperoleh tepat satu sumber daya sebelum memasukkan blok dan memberikannya ke pernyataan Using. Jika Anda menyediakan resourceexpression, Anda harus memperoleh sumber daya sebelum meneruskan kontrol ke pernyataan Using.

  • Penggunaan berarti mengakses sumber daya dan melakukan tindakan dengannya. Pernyataan antara Using dan End Using mewakili penggunaan sumber daya.

  • Pembuangan berarti memanggil metode Dispose pada objek di resourcename. Ini memungkinkan objek untuk mengakhiri sumber dayanya dengan bersih. Pernyataan End Using membuang sumber daya di bawah kontrol blok Using.

Perilaku

Blok Using ber perilaku seperti konstruksi Try...Finally di mana blok Try menggunakan sumber daya dan blok Finally membuangnya. Karena itu, blok Using menjamin pembuangan sumber daya, tidak peduli bagaimana Anda keluar dari blok. Hal ini berlaku bahkan dalam kasus pengecualian yang tidak ditangani, kecuali untuk StackOverflowException.

Cakupan setiap variabel sumber daya yang diperoleh pernyataan Using terbatas pada blok Using.

Jika Anda menentukan lebih dari satu sumber daya sistem dalam pernyataan Using, efeknya sama seperti jika Anda melapiskan blok-blok Using satu sama lain.

Jika resourcename adalah Nothing, tidak ada panggilan ke Dispose yang dilakukan, dan tidak ada pengecualian yang dilemparkan.

Penanganan Pengecualian Terstruktur Dalam Blok Penggunaan

Jika Anda perlu menangani pengecualian yang mungkin terjadi dalam blok Using, Anda dapat menambahkan konstruksi Try...Finally lengkap ke sana. Jika Anda perlu menangani kasus di mana pernyataan Using tidak berhasil memperoleh sumber daya, Anda dapat menguji untuk melihat apakah resourcename adalah Nothing.

Penanganan Pengecualian Terstruktur Alih-alih Menggunakan Blok

Jika Anda membutuhkan kontrol yang lebih baik atas akuisisi sumber daya, atau Anda memerlukan kode tambahan di blok Finally, Anda dapat menulis ulang blok Using seperti konstruksi Try...Finally. Contoh berikut menunjukkan kerangka konstruksi Try dan Using yang setara dalam akuisisi dan pembuangan resource.

Using resource As New resourceType
    ' Insert code to work with resource.
End Using

' For the acquisition and disposal of resource, the following  
' Try construction is equivalent to the Using block.
Dim resource As New resourceType
Try
    ' Insert code to work with resource.
Finally
    If resource IsNot Nothing Then
        resource.Dispose()
    End If
End Try

Catatan

Kode di dalam blok Using tidak boleh menetapkan objek pada resourcename ke variabel lain. Ketika Anda keluar dari blok Using, sumber daya dibuang, dan variabel lain tidak dapat mengakses sumber daya yang ditunjuknya.

Contoh

Contoh berikut membuat file yang diberi nama log.txt dan menulis dua baris teks ke file itu. Contoh itu juga membaca file yang sama dan menampilkan baris teks:

Karena kelas TextWriter dan TextReader menerapkan antarmuka IDisposable, kode itu dapat menggunakan pernyataan Using untuk memastikan bahwa file ditutup dengan benar setelah operasi tulis dan baca.

Private Sub WriteFile()
    Using writer As System.IO.TextWriter = System.IO.File.CreateText("log.txt")
        writer.WriteLine("This is line one.")
        writer.WriteLine("This is line two.")
    End Using
End Sub

Private Sub ReadFile()
    Using reader As System.IO.TextReader = System.IO.File.OpenText("log.txt")
        Dim line As String

        line = reader.ReadLine()
        Do Until line Is Nothing
            Console.WriteLine(line)
            line = reader.ReadLine()
        Loop
    End Using
End Sub

Lihat juga