Megosztás a következőn keresztül:


Útmutató: Argumentum érték szerinti átadásának kényszerítése (Visual Basic)

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 ByVal van 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 ByRef van 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 . Az kényszerítő ByValhívásban jegyezze fel 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 további zárójelek közé van adva, az setNewString eljárás nem módosíthatja az értékét a hívókódban, és MsgBox a "Nem helyettesíthető, ha átadta ByVal". Ha str nincs további zárójelek közé zárva, az eljárás módosíthatja azt, és MsgBox "Ez az inString argumentum új értéke".

A kód fordí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értelmezett érték az argumentumok átadása. 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 Security

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