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.
Saat Anda memanggil prosedur, setiap argumen yang Anda berikan sesuai dengan salah satu parameter yang ditentukan dalam prosedur. Dalam beberapa kasus, kode prosedur dapat mengubah nilai yang mendasar argumen dalam kode panggilan. Dalam kasus lain, prosedur hanya dapat mengubah salinan lokal argumen.
Saat Anda memanggil prosedur, Visual Basic membuat salinan lokal dari setiap argumen yang diteruskan ByVal. Untuk setiap argumen yang diteruskan ByRef, Visual Basic memberi kode prosedur referensi langsung ke elemen pemrograman yang mendasari argumen yang diberikan dalam kode pemanggilan.
Jika elemen yang mendasar dalam kode panggilan adalah elemen yang dapat dimodifikasi dan argumen diteruskan ByRef
, kode prosedur dapat menggunakan referensi langsung untuk mengubah nilai elemen dalam kode panggilan.
Mengubah Nilai Yang Mendasar
Untuk mengubah nilai yang mendasar dari argumen prosedur dalam kode panggilan
Dalam deklarasi prosedur, tentukan ByRef untuk parameter yang sesuai dengan argumen.
Dalam kode panggilan, berikan elemen pemrograman yang dapat dimodifikasi sebagai argumen.
Dalam kode panggilan, jangan sertakan argumen dalam tanda kurung dalam daftar argumen.
Dalam kode prosedur, gunakan nama parameter untuk menetapkan nilai ke elemen yang mendasar dalam kode panggilan.
Lihat contoh lebih lanjut untuk demonstrasi.
Mengubah Salinan Lokal
Jika elemen yang mendasar dalam kode panggilan adalah elemen yang tidak dapat dimodifikasi, atau jika argumen diteruskan ByVal
, prosedur tidak dapat mengubah nilainya dalam kode panggilan. Namun, prosedur dapat mengubah salinan lokal argumen tersebut.
Untuk mengubah salinan argumen prosedur dalam kode prosedur
Dalam deklarasi prosedur, tentukan ByVal untuk parameter yang sesuai dengan argumen.
-atau-
Dalam kode panggilan, sertakan argumen dalam tanda kurung dalam daftar argumen. Ini memaksa Visual Basic untuk meneruskan argumen menurut nilai, bahkan jika parameter yang sesuai menentukan
ByRef
.Dalam kode prosedur, gunakan nama parameter untuk menetapkan nilai ke salinan lokal argumen. Nilai yang mendasar dalam kode panggilan tidak diubah.
Contoh
Contoh berikut menunjukkan dua prosedur yang mengambil variabel array dan beroperasi pada elemennya. Prosedur increase
ini dengan sederhana menambahkan satu ke setiap elemen. Prosedur menetapkan replace
array baru ke parameter a()
lalu menambahkannya ke setiap elemen.
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Public Sub replace(ByRef a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Panggilan pertama MsgBox
menampilkan "Setelah peningkatan nilai n: 11, 21, 31, 41". Karena array n
adalah jenis referensi, replace
dapat mengubah anggotanya, meskipun mekanisme passing adalah ByVal
.
Panggilan kedua MsgBox
menampilkan "Setelah mengganti(n): 101, 201, 301". Karena n
diteruskan ByRef
, replace
dapat memodifikasi variabel n
dalam kode panggilan dan menetapkan array baru ke dalamnya. Karena n
merupakan jenis referensi, replace
juga dapat mengubah anggotanya.
Anda dapat mencegah prosedur memodifikasi variabel itu sendiri dalam kode panggilan. Lihat Cara: Melindungi Argumen Prosedur Terhadap Perubahan Nilai.
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.
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: Melindungi Argumen Prosedur Terhadap Perubahan Nilai
- Cara: Memaksa Argumen untuk Diteruskan sebagai Nilai
- Meneruskan Argumen menurut Posisi dan berdasarkan Nama
- Jenis Nilai dan Tipe Referensi