webForumDet fria alternativet

Byval, Byref....

8 svar · 367 visningar · startad av Harback

HarbackMedlem sedan juni 2001206 inlägg
#1

Vad är ByVal och ByRef och vad det är för skillnad på dom.
Har försökt att leta upp förklaringen men har inte riktigt förstått. Någon som kan förklara?

------------------
MVH
Harback

tohaMedlem sedan dec. 1999707 inlägg
#2

Man skulle kunna säga så att om du gör en parameter till ByVal (by value) så får funktionen en kopia av värdet. Om du gör en parameter till ByRef (by reference) så får funktionen verkligen den variabel som skickas in. Ex:

---------------------------------------

Function grep(ByVal nummer)
nummer = 82
End Function

Dim nummer
nummer = 10
Response.Write grep(nummer)
Response.Write nummer

------------------------------------

Ovanstående kod skriver ut "10" på skärmen. Men om du däremot ändrar parametern till ByRef:

------------------------------------

Function grep(ByRef nummer)
nummer = 82
End Function

Dim nummer
nummer = 10
Response.Write grep(nummer)
Response.Write nummer

------------------------------------

Den här koden kommer att skriva ut "82" på skärmen eftersom funktionen den skriver värdet 82 till variabeln. Man kan säga att funktionen får en pekare till variabeln.

Värt att tänka på är att ByVal är generellt sett snabbare. Det är inte att rekommendera att använda ByRef om man gör anrop över nätverk.

Hoppas att du förstår nu.

------------------
/ Torbjörn Hansson, webbutvecklare,
Density

emissionMedlem sedan dec. 19996 721 inlägg
#3

Värt att tänka på är att ByVal är generellt sett snabbare

Nja, snarare tvärtom. ByVal är snabbare om man anropar out-of-process, till externa objekt. Till vanliga subbar och funktioner är ByRef mycket snabbare. Skillnaden blir oftast marginell, men ByVal-anropen är betydligt långsammare, procentuellt sett.

tohaMedlem sedan dec. 1999707 inlägg
#4

Å fasen. Har alltid trott det var tvärtom. Tack för upplysning Emission - mannen med koll! :)

------------------
/ Torbjörn Hansson, webbutvecklare,
Density

doggelitoMedlem sedan juni 20003 076 inlägg
#5

...fortsätter på en intressant tråd:
Ska man alltid använda Byval och Byref till functioner och subbar eller finns det tillfällen då man lika gärna kan strunta i dem?

@ndersMedlem sedan juni 200032 969 inlägg
#6

Anger du inte ByVal eller ByRef, så antas ByRef som default.

Lite läsning: http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=33

Mvh,

doggelitoMedlem sedan juni 20003 076 inlägg
#7

Hmm, okej: byref skickar alltså in orginalvärdet och byval skickar in en kopia, så långt är jag med. :)
Men jag kan inte förstå när jag vill göra antingen på det ena sättet eller det andra, finns det några speciella tillfällen för dem båda?

@ndersMedlem sedan juni 200032 969 inlägg
#8

Har du behov av att returnera mer än ett värde så kan du göra det med ByVal-parametrar. Vill du att funktionen skall göra ändringar till variabler som inte är lokala för funktionen, skicka hellre in variablerna by reference in i funktionen än använd globala variabler.

I övrigt, använd ByVal.

Mvh,

doggelitoMedlem sedan juni 20003 076 inlägg
#9

okidoki! :bire

257 ms totalt · 3 externa anrop · v20260731065814-full.30151723
135 ms — hämta forumlista (db)
120 ms — hämta statistik (db)
134 ms — hämta tråd, inlägg och bilagor (db)