Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menyatakan awal Using blok dan secara opsional memperoleh sumber daya sistem yang dikontrol blok.
Sintaksis
Using { resourcelist | resourceexpression }
[ statements ]
End Using
Bagian
| Istilah | Definisi |
|---|---|
resourcelist |
Diperlukan jika Anda tidak menyediakan resourceexpression. Daftar satu atau beberapa sumber daya sistem yang dikontrol blok ini Using , dipisahkan oleh koma. |
resourceexpression |
Diperlukan jika Anda tidak menyediakan resourcelist. Variabel referensi atau ekspresi yang mengacu pada sumber daya sistem yang akan dikontrol oleh blok ini Using . |
statements |
Fakultatif. Blok pernyataan yang Using dijalankan blok. |
End Using |
Dibutuhkan. Mengakhiri definisi Using blok dan membuang semua sumber daya yang dikontrolnya. |
Setiap sumber daya dalam resourcelist bagian memiliki sintaks dan bagian berikut:
resourcename As New resourcetype [ ( [ arglist ] ) ]
-atau-
resourcename As resourcetype = resourceexpression
Bagian daftar sumber daya
| Istilah | Definisi |
|---|---|
resourcename |
Dibutuhkan. Variabel referensi yang mengacu pada sumber daya sistem yang dikontrol Using blok. |
New |
Diperlukan jika Using pernyataan memperoleh sumber daya. Jika Anda telah memperoleh sumber daya, gunakan alternatif sintaks kedua. |
resourcetype |
Dibutuhkan. Kelas sumber daya. Kelas harus mengimplementasikan IDisposable antarmuka. |
arglist |
Fakultatif. Daftar argumen yang Anda teruskan ke konstruktor untuk membuat instans resourcetype. Lihat Daftar Parameter. |
resourceexpression |
Dibutuhkan. 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 Using pernyataan. |
Komentar
Terkadang kode Anda memerlukan sumber daya yang tidak dikelola, seperti handel file, pembungkus COM, atau koneksi SQL.
Using Blok menjamin pembuangan satu atau beberapa sumber daya tersebut ketika kode Anda selesai dengannya. Ini membuatnya tersedia untuk digunakan oleh kode lain.
Sumber daya terkelola dibuang oleh pengumpul sampah .NET Framework (GC) tanpa pengkodan tambahan di bagian Anda. Anda tidak memerlukan blok untuk sumber daya terkelola Using . Namun, Anda masih dapat menggunakan Using blok 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 dapat
Usingmemperoleh satu atau beberapa sumber daya, atau Anda dapat memperoleh tepat satu sumber daya sebelum memasukkan blok dan menyediakannya keUsingpernyataan. Jika Anda menyediakanresourceexpression, Anda harus memperoleh sumber daya sebelum meneruskan kontrol keUsingpernyataan.Penggunaan berarti mengakses sumber daya dan melakukan tindakan dengan sumber daya tersebut. Pernyataan antara
UsingdanEnd Usingmewakili penggunaan sumber daya.Pembuangan berarti memanggil Dispose metode pada objek di
resourcename. Ini memungkinkan objek untuk mengakhiri sumber dayanya dengan bersih. PernyataanEnd Usingmembuang sumber daya di bawahUsingkontrol blok.
Perilaku
Blok Using berulah seperti Trykonstruksi ...Finally di mana Try blok menggunakan sumber daya dan Finally blok membuangnya. Karena itu, Using blok menjamin pembuangan sumber daya, tidak peduli bagaimana Anda keluar dari blok. Ini benar bahkan dalam kasus pengecualian yang tidak tertangani, kecuali untuk StackOverflowException.
Cakupan setiap variabel sumber daya yang Using diperoleh oleh pernyataan terbatas pada Using blok .
Jika Anda menentukan lebih dari satu sumber daya sistem dalam Using pernyataan, efeknya sama seperti jika Anda melapisi Using blok satu di dalam yang lain.
Jika resourcename adalah Nothing, tidak ada panggilan untuk Dispose dilakukan, dan tidak ada pengecualian yang dilemparkan.
Penanganan Pengecualian Terstruktur Dalam Blok Penggunaan
Jika Anda perlu menangani pengecualian yang mungkin terjadi dalam blok, Anda dapat menambahkan Trykonstruksi lengkap ...Finally ke dalamnyaUsing. Jika Anda perlu menangani kasus di mana Using pernyataan tidak berhasil dalam memperoleh sumber daya, Anda dapat menguji untuk melihat apakah resourcename adalah Nothing.
Penanganan Pengecualian Terstruktur Alih-alih Blok Penggunaan
Jika Anda membutuhkan kontrol yang lebih baik atas akuisisi sumber daya, atau Anda memerlukan kode tambahan di Finally blok, Anda dapat menulis Using ulang blok sebagai Trykonstruksi ...Finally . Contoh berikut menunjukkan kerangka Try dan Using konstruksi 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
Nota
Kode di dalam Using blok tidak boleh menetapkan objek resourcename ke variabel lain. Saat Anda keluar dari Using blok, sumber daya dibuang, dan variabel lain tidak dapat mengakses sumber daya yang ditujukannya.
Contoh
Contoh berikut membuat file yang diberi nama log.txt dan menulis dua baris teks ke file. Contoh juga membaca file yang sama dan menampilkan baris teks:
TextWriter Karena kelas dan TextReader menerapkan IDisposable antarmuka, kode dapat menggunakan Using pernyataan 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