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.
Deklarasi prosedur menentukan mekanisme lolos. Jika parameter dinyatakan ByRef, Visual Basic mengharapkan untuk meneruskan argumen yang sesuai berdasarkan referensi. Prosedur ini memungkinkan perubahan nilai elemen pemrograman yang mendasari argumen dalam kode yang memanggil. Jika Anda ingin melindungi elemen dasar dari perubahan tersebut, Anda dapat menggantikan mekanisme passing dalam panggilan prosedur dengan membungkus nama argumen dalam tanda kurung. Tanda kurung ini merupakan tambahan dari tanda kurung yang menyertakan daftar argumen dalam pemanggilan.
Kode panggilan tidak dapat mengambil alih mekanisme ByVal .
Untuk memaksa argumen diteruskan berdasarkan nilai
Jika parameter yang sesuai dinyatakan
ByVal
dalam prosedur, Anda tidak perlu mengambil langkah tambahan. Visual Basic sudah mengharapkan untuk meneruskan argumen menurut nilai.Jika parameter yang sesuai dinyatakan dalam prosedur, sertakan
ByRef
argumen dalam tanda kurung dalam panggilan prosedur.
Contoh
Contoh berikut mengambil alih ByRef
deklarasi parameter. Dalam panggilan yang mengharuskan ByVal
, perhatikan dua tingkat tanda kurung.
Sub setNewString(ByRef inString As String)
inString = "This is a new value for the inString argument."
MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal"
' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)
' The following call allows str to be passed ByRef as declared.
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)
Ketika str
diapit dalam tanda kurung tambahan dalam daftar argumen, setNewString
prosedur tidak dapat mengubah nilainya dalam kode panggilan, dan MsgBox
menampilkan "Tidak dapat diganti jika diteruskan ByVal". Ketika str
tidak diapit dalam tanda kurung tambahan, prosedur dapat mengubahnya, dan MsgBox
menampilkan "Ini adalah nilai baru untuk argumen inString."
Mengkompilasi kode
Saat Anda meneruskan variabel berdasarkan referensi, Anda harus menggunakan ByRef
kata kunci untuk menentukan mekanisme ini.
Default dalam Visual Basic adalah meneruskan argumen berdasarkan nilai. Namun, adalah praktik pemrograman yang baik untuk menyertakan kata kunci ByVal atau ByRef dengan setiap parameter yang dideklarasikan. Ini membuat kode Anda lebih mudah dibaca.
Pemrograman yang Kuat
Jika prosedur mendeklarasikan parameter ByRef, eksekusi kode yang benar mungkin bergantung pada mampu mengubah elemen yang mendasar dalam kode panggilan. Jika kode panggilan mengambil alih mekanisme panggilan ini dengan menyertakan argumen dalam tanda kurung, atau jika melewati argumen yang tidak dapat dimodifikasi, prosedur tidak dapat mengubah elemen yang mendasar. Ini mungkin menghasilkan hasil yang tidak terduga dalam kode panggilan.
Keamanan .NET Framework
Selalu ada potensi risiko dalam memungkinkan prosedur untuk mengubah nilai yang mendasar argumen dalam kode panggilan. Pastikan Anda mengharapkan nilai ini diubah, dan bersiaplah untuk memeriksa validitas sebelum menggunakannya.
Lihat juga
- Prosedur
- Parameter prosedur dan Argumen
- Cara: Meneruskan Argumen ke Prosedur
- Meneruskan Argumen menurut Nilai dan berdasarkan Referensi
- Perbedaan Antara Argumen yang Dapat Dimodifikasi dan Tidak Dapat Dimodifikasi
- Perbedaan Antara Pengiriman Argumen Berdasarkan Nilai dan Referensi
- Cara: Mengubah Nilai Argumen Prosedur
- Cara: Melindungi Argumen Prosedur Terhadap Perubahan Nilai
- Meneruskan Argumen menurut Posisi dan berdasarkan Nama
- Jenis Nilai dan Tipe Referensi