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.
Amikor meghív egy eljárást, minden megadott argumentum megfelel az eljárásban meghatározott paraméterek egyikének. Bizonyos esetekben az eljáráskód megváltoztathatja a hívó kódban lévő argumentum alapjául szolgáló értéket. Más esetekben az eljárás csak az argumentum helyi másolatát módosíthatja.
Az eljárás meghívásakor a Visual Basic helyi másolatot készít a ByVal által átadott összes argumentumról. A ByRef által átadott összes argumentum esetében 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.
Ha a hívókód mögöttes eleme módosítható elem, és az argumentum átadása megtörtént ByRef, az eljáráskód a közvetlen hivatkozással módosíthatja az elem értékét a hívókódban.
A mögöttes érték módosítása
Egy eljárásargumentum mögöttes értékének módosítása a hívókódban
Az eljárásdeklarációban adja meg a ByRef értéket az argumentumnak megfelelő paraméterhez.
A hívókódban adjon át egy módosítható programozási elemet argumentumként.
A hívókódban ne foglalja zárójelbe az argumentumot az argumentumlistában.
Az eljáráskódban a paraméternév használatával rendeljen hozzá egy értéket a hívókód mögöttes eleméhez.
A bemutatóhoz lásd a lenti példát.
Helyi másolatok módosítása
Ha a hívókód mögöttes eleme nem módosítható elem, vagy ha az argumentum átadása megtörtént ByVal, az eljárás nem módosíthatja annak értékét a hívókódban. Az eljárás azonban módosíthatja az argumentum helyi másolatát.
Egy eljárásargumentum másolatának módosítása az eljáráskódban
Az eljárásdeklarációban adja meg az argumentumnak megfelelő paraméter ByVal értékét.
-vagy-
A hívókódban zárójelbe foglalja az argumentumot az argumentumlistában. Ez arra kényszeríti a Visual Basicet, hogy érték szerint adja át az argumentumot, még akkor is, ha a megfelelő paramétert
ByRefadja meg.Az eljáráskódban a paraméter nevével rendeljen értéket az argumentum helyi példányához. A hívókód mögöttes értéke nem módosul.
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.
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)))
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, replace 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): 101, 201, 301". Mivel n átadásra kerül ByRef, replace módosíthatja a változót n a hívókódban, és hozzá rendelhet egy új tömböt. Mivel n hivatkozástípusról van szó, replace a tagok is módosíthatók.
Megakadályozhatja, hogy az eljárás magát a változót módosítsa a hívókódban. Lásd : Eljárásargumentum védelme az értékváltozásokkal szemben.
A kód összeállítása
Ha hivatkozással ad át egy változót, a mechanizmus megadásához a ByRef kulcsszót kell használnia.
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ó.
.NET-keretrendszer biztonsága
Mindig fennáll a veszélye annak, hogy egy eljárás megváltoztathatja a hívó kódban lévő argumentum alapjául szolgáló értéket. A használat előtt győződjön meg arról, hogy módosítani szeretné ezt az értéket, és készen áll annak érvényességének ellenőrzésére.
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 védelme az értékváltozásokkal szemben
- Ú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