Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha egy eljárás ByRef-ként deklarál egy paramétert, a Visual Basic közvetlen hivatkozást ad az eljáráskódnak a hívó kódban található argumentum alapjául szolgáló programozási elemre. Ez lehetővé teszi, hogy az eljárás módosítsa az argumentum alapjául szolgáló értéket a hívókódban. Bizonyos esetekben előfordulhat, hogy a hívó kód védelmet szeretne biztosítani egy ilyen változás ellen.
Az argumentumokat az eljárás megfelelő ByVal paraméterének deklarálásával bármikor megvédheti a változástól. Ha bizonyos esetekben módosítani szeretne egy adott argumentumot, másokat nem, de deklarálhatja, ByRef és hagyhatja, hogy a hívó kód határozza meg az egyes hívások továbbítási mechanizmusát. Ezt úgy teszi, hogy zárójelekbe foglalja a megfelelő argumentumot, hogy érték szerint adja át, vagy ne zárójelbe foglalja, hogy hivatkozással adja át. További információkért lásd: Hogyan kényszeríthető egy argumentum érték szerinti átadásra.
példa
Az alábbi példa két eljárást mutat be, amelyek egy tömbváltozót használnak, és az elemein működnek. Az increase eljárás egyszerűen hozzáad egyet az egyes elemekhez. Az replace eljárás egy új tömböt rendel a paraméterhez a() , majd hozzáad egyet az egyes elemekhez. Az újbóli hozzárendelés azonban nem befolyásolja a hívó kódban található mögöttes tömbváltozót.
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(ByVal 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)))
Az első MsgBox hívás a következőt jeleníti meg: "A növelés után: 11, 21, 31, 41". Mivel a tömb n egy referenciatípus, increase módosíthatja a tagjait, annak ellenére, hogy az átengedési mechanizmus .ByVal
A második MsgBox hívás a következőt jeleníti meg: "After replace(n): 11, 21, 31, 41". Mivel n átadásra került ByVal, replace nem tudja módosítani a n változót a hívókódban egy új tömb hozzáadásával. Amikor replace létrehozza az új tömbpéldányt k , és hozzárendeli a helyi változóhoz a, elveszíti a hívókód által átadott hivatkozást n . Ha módosítja a tagok, acsak a helyi tömb k lesz érintett.
replace Ezért nem növeli a tömb n értékeit a hívókódban.
A kód összeállítása
A Visual Basicben az alapértelmezés szerint az argumentumok érték szerint kerülnek átadásra. Azonban jó programozási gyakorlat, ha a ByVal vagy a ByRef kulcsszót minden deklarált paraméterrel együtt tartalmazza. Így a kód könnyebben olvasható.
Lásd még
- Eljárások
- Eljárásparaméterek és argumentumok
- Útmutató: Argumentumok átadása eljárásnak
- Argumentumok átadása érték és hivatkozás szerint
- Módosítható és nem módosítható argumentumok közötti különbségek
- Az argumentum érték és hivatkozás szerinti átadása közötti különbségek
- Útmutató: Eljárásargumentum értékének módosítása
- Útmutató: Argumentum érték szerinti átadásának kényszerítése
- Argumentumok átadása pozíció és név szerint
- értéktípusok és referenciatípusok