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
8 svar · 367 visningar · startad av Harback
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
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
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.
Å fasen. Har alltid trott det var tvärtom. Tack för upplysning Emission - mannen med koll! :)
------------------
/ Torbjörn Hansson, webbutvecklare,
Density
...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?
Anger du inte ByVal eller ByRef, så antas ByRef som default.
Lite läsning: http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=33
Mvh,
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?
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,
okidoki! :bire