Dela via


Skillnader mellan att skicka ett argument efter värde och efter referens (Visual Basic)

När du skickar ett eller flera argument till en procedur motsvarar varje argument ett underliggande programmeringselement i anropskoden. Du kan skicka antingen värdet för det underliggande elementet eller en referens till det. Detta kallas för överföringsmekanismen.

Skicka efter värde

Du skickar ett argument efter värde genom att ange nyckelordet ByVal för motsvarande parameter i procedurdefinitionen. När du använder den här överföringsmekanismen kopierar Visual Basic värdet för det underliggande programmeringselementet till en lokal variabel i proceduren. Procedurkoden har ingen åtkomst till det underliggande elementet i anropskoden.

Skicka med referens

Du skickar ett argument med referens genom att ange nyckelordet ByRef för motsvarande parameter i procedurdefinitionen. När du använder den här överföringsmekanismen ger Visual Basic proceduren en direkt referens till det underliggande programmeringselementet i anropskoden.

Överföringsmekanism och elementtyp

Valet av överföringsmekanism är inte detsamma som klassificeringen av den underliggande elementtypen. Att skicka efter värde eller referens refererar till vad Visual Basic tillhandahåller till procedurkoden. En värdetyp eller referenstyp refererar till hur ett programmeringselement lagras i minnet.

Överföringsmekanismen och elementtypen är dock kopplade till varandra. Värdet för en referenstyp är en pekare till data någon annanstans i minnet. Det innebär att när du skickar en referenstyp efter värde har procedurkoden en pekare till det underliggande elementets data, även om den inte kan komma åt själva det underliggande elementet. Om elementet till exempel är en matrisvariabel har procedurkoden inte åtkomst till själva variabeln, men den kan komma åt matrismedlemmarna.

Möjlighet att ändra

När du skickar ett icke-modifierat element som argument kan proceduren aldrig ändra det i anropskoden, oavsett om det skickas ByVal eller ByRef.

För ett ändringsbart element sammanfattar följande tabell interaktionen mellan elementtypen och överföringsmekanismen.

Elementtyp Passerade ByVal Passerade ByRef
Värdetyp (innehåller endast ett värde) Proceduren kan inte ändra variabeln eller någon av dess medlemmar. Proceduren kan ändra variabeln och dess medlemmar.
Referenstyp (innehåller en pekare till en klass- eller strukturinstans) Proceduren kan inte ändra variabeln men kan ändra medlemmar i den instans som den pekar på. Proceduren kan ändra variabeln och medlemmarna i den instans som den pekar på.

Se även