Bagikan melalui


Dengan... Akhiri dengan Pernyataan (Visual Basic)

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

Lihat juga