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.
Menjalankan serangkaian pernyataan yang berulang kali merujuk ke satu objek atau struktur sehingga pernyataan dapat menggunakan sintaks yang disederhanakan saat mengakses anggota objek atau struktur.
Sintaksis
With objectExpression
[ statements ]
End With
Bagian
| Istilah | Definisi |
|---|---|
objectExpression |
Dibutuhkan. Ekspresi yang mengevaluasi ke objek. Ekspresi mungkin sangat kompleks dan dievaluasi hanya sekali. Ekspresi dapat mengevaluasi ke jenis data apa pun, termasuk jenis dasar. |
statements |
Fakultatif. Satu atau beberapa pernyataan antara With dan End With yang dapat merujuk ke anggota objek yang dihasilkan oleh evaluasi objectExpression. |
End With |
Dibutuhkan. Mengakhiri definisi With blok. |
Komentar
Dengan menggunakan With...End With, Anda dapat melakukan serangkaian pernyataan pada objek tertentu tanpa menentukan nama objek beberapa kali.
With Dalam blok pernyataan, Anda dapat menentukan anggota objek yang dimulai dengan titik, seolah-olah With objek pernyataan mendahuluinya.
Misalnya, untuk mengubah beberapa properti pada satu objek, tempatkan pernyataan penetapan properti di dalam With...End With blok, mengacu pada objek hanya sekali alih-alih sekali untuk setiap penetapan properti.
Jika kode Anda mengakses objek yang sama dalam beberapa pernyataan, Anda mendapatkan manfaat berikut dengan menggunakan With pernyataan :
Anda tidak perlu mengevaluasi ekspresi kompleks beberapa kali atau menetapkan hasilnya ke variabel sementara untuk merujuk ke anggotanya beberapa kali.
Anda membuat kode Anda lebih mudah dibaca dengan menghilangkan ekspresi kualifikasi berulang.
Jenis objectExpression data dapat berupa jenis kelas atau struktur apa pun atau bahkan jenis dasar Visual Basic seperti Integer. Jika objectExpression merupakan struktur, kemampuan untuk menetapkan kepada anggotanya bergantung pada apakah ekspresi struktur dapat direferensikan. Anda dapat menetapkan kepada anggota struktur yang dapat direferensikan secara langsung (seperti variabel, elemen array, atau bidang), tetapi Anda mendapatkan kesalahan jika Anda mencoba menetapkan nilai ke anggota struktur yang dikembalikan oleh nilai dari fungsi, properti, atau operator, atau ketika tanda kurung digunakan untuk memotong ikatan referensi (misalnya, With (structureVariable)). Ini adalah kesalahan yang sama yang akan Anda dapatkan jika Anda memanggil metode yang mengembalikan struktur dan segera mengakses dan menetapkan nilai kepada anggota hasil fungsi, seperti GetAPoint().x = 1. Masalah dalam kedua kasus adalah bahwa struktur hanya ada pada tumpukan panggilan, dan tidak ada cara anggota struktur yang dimodifikasi dalam situasi ini dapat menulis ke lokasi sehingga kode lain dalam program dapat mengamati perubahan.
objectExpression dievaluasi sekali, setelah masuk ke blok. Anda tidak dapat menetapkan objectExpression ulang dari dalam With blok.
With Dalam blok, Anda dapat mengakses metode dan properti hanya dari objek yang ditentukan tanpa memenuhi syarat. Anda dapat menggunakan metode dan properti objek lain, tetapi Anda harus memenuhi syarat dengan nama objeknya.
Anda dapat menempatkan satu With...End With pernyataan dalam pernyataan lain. Pernyataan berlapis mungkin membingungkan With...End With jika objek yang dirujuk tidak jelas dari konteks. Anda harus memberikan referensi yang sepenuhnya memenuhi syarat ke objek yang berada di blok luar With saat objek dirujuk dari dalam blok dalam With .
Anda tidak dapat bercabang With ke blok pernyataan dari luar blok.
Kecuali blok berisi perulangan, pernyataan hanya berjalan sekali. Anda dapat menumpuk berbagai jenis struktur kontrol. Untuk informasi selengkapnya, lihat Struktur Kontrol Tertumpuk.
Nota
Anda juga dapat menggunakan With kata kunci dalam penginisialisasi objek. Untuk informasi dan contoh selengkapnya, lihat Penginisialisasi Objek: Jenis Bernama dan Anonim dan Tipe Anonim.
Jika Anda menggunakan With blok hanya untuk menginisialisasi properti atau bidang objek yang baru saja Anda buat, pertimbangkan untuk menggunakan penginisialisasi objek sebagai gantinya.
Contoh 1
Dalam contoh berikut, setiap With blok menjalankan serangkaian pernyataan pada satu objek.
Private Sub AddCustomer()
Dim theCustomer As New Customer
With theCustomer
.Name = "Coho Vineyard"
.URL = "http://www.cohovineyard.com/"
.City = "Redmond"
End With
With theCustomer.Comments
.Add("First comment.")
.Add("Second comment.")
End With
End Sub
Public Class Customer
Public Property Name As String
Public Property City As String
Public Property URL As String
Public Property Comments As New List(Of String)
End Class
Contoh 2
Contoh pernyataan berlapis With…End With berikut. Dalam pernyataan berlapis With , sintaks mengacu pada objek dalam.
Dim theWindow As New EntryWindow
With theWindow
With .InfoLabel
.Content = "This is a message."
.Foreground = Brushes.DarkSeaGreen
.Background = Brushes.LightYellow
End With
.Title = "The Form Title"
.Show()
End With
Contoh 3
Contoh berikut menunjukkan cara With...End With kerja pernyataan dengan struktur. Anda dapat menetapkan kepada anggota struktur yang dapat direferensikan (seperti elemen array), tetapi tidak untuk struktur yang dikembalikan oleh nilai atau ketika tanda kurung digunakan.
Private Sub DemonstrateStructureWithStatement()
' Create an array of structures - this is referenceable
Dim points(2) As Point
' Valid: Array elements are referenceable, so assignments work
With points(0)
.X = 10
.Y = 20
End With
' Create a single structure variable - this is also referenceable
Dim singlePoint As Point
With singlePoint
.X = 30
.Y = 40
End With
' Invalid: Using parentheses cuts reference ties
' With (points(0))
' .X = 50 ' This would cause BC30068 error
' .Y = 60
' End With
' Invalid: Function returns by value, not referenceable
' With GetPoint()
' .X = 70 ' This would cause BC30068 error
' .Y = 80
' End With
End Sub
Private Function GetPoint() As Point
Return New Point With {.X = 1, .Y = 2}
End Function
Private Structure Point
Public X As Integer
Public Y As Integer
End Structure