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 pernyataanUsing
. Jika Anda menyediakanresourceexpression
, Anda harus memperoleh sumber daya sebelum meneruskan kontrol ke pernyataanUsing
.Penggunaan berarti mengakses sumber daya dan melakukan tindakan dengannya. Pernyataan antara
Using
danEnd Using
mewakili penggunaan sumber daya.Pembuangan berarti memanggil metode Dispose pada objek di
resourcename
. Ini memungkinkan objek untuk mengakhiri sumber dayanya dengan bersih. PernyataanEnd Using
membuang sumber daya di bawah kontrol blokUsing
.
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk