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.
Az eljárás deklarációja határozza meg az átadási mechanizmust. Ha egy paraméter ByRef deklarálva van, a Visual Basic várhatóan hivatkozással adja át a megfelelő argumentumot. Ez lehetővé teszi, hogy az eljárás módosítsa a hívó kódban az argumentum alapjául szolgáló programozási elem értékét. Ha meg szeretné védeni az alapul szolgáló elemet az ilyen változástól, felülbírálhatja az ByRef átengedési mechanizmust az eljáráshívásban úgy, hogy zárójelekbe foglalja az argumentum nevét. Ezek a zárójelek azon zárójelek mellett vannak, amelyek az argumentumlistát a hívásba foglalják.
A hívókód nem bírálhat felül ByVal-mechanizmust .
Argumentum érték szerinti átadásának kényszerítése
Ha a megfelelő paraméter deklarálva
ByValvan az eljárásban, nem kell további lépéseket tennie. A Visual Basic már elvárja, hogy érték szerint adja át az argumentumot.Ha a megfelelő paraméter deklarálva
ByRefvan az eljárásban, csatolja az argumentumot zárójelbe az eljáráshívásban.
példa
Az alábbi példa felülír egy paraméterdeklarációt ByRef . A ByVal kényszerítő hívásban vegye figyelembe a zárójelek két szintjét.
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)
Ha str az argumentumlistában extra zárójelek közé van adva, az setNewString eljárás nem módosíthatja ennek az értékét a hívókódban, és MsgBox azt jeleníti meg, hogy "Nem helyettesíthető érték szerint való átadás esetén". Ha str nincs további zárójelek közé zárva, az eljárás módosíthatja azt, és MsgBox megjeleníti, "Ez az inString argumentum új értéke."
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ó.
Robusztus programozás
Ha egy eljárás byRef paramétert deklarál, a kód helyes végrehajtása attól függhet, hogy meg tudja-e változtatni a hívó kód mögöttes elemét. Ha a hívó kód felülbírálja ezt a hívó mechanizmust az argumentum zárójelekbe való csatolásával, vagy ha nem módosítható argumentumot ad át, az eljárás nem módosíthatja az alapul szolgáló elemet. Ez váratlan eredményeket eredményezhet a hívókódban.
.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 értékének módosítása
- Útmutató: Eljárásargumentum védelme az értékváltozásokkal szemben
- Argumentumok átadása pozíció és név szerint
- értéktípusok és referenciatípusok