webForumDet fria alternativet
Logga in / Bli medlem

Byval, Byref....

ASP

8 svar · 369 visningar · startad av Harback

Medlem sedan juni 2001206 inlägg
Trådstart#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?

Medlem 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.

Medlem 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.

Medlem sedan dec. 1999707 inlägg
#4

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

Medlem 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?

Medlem sedan juni 200032 967 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,

Medlem 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?

Medlem sedan juni 200032 967 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,

Medlem sedan juni 20003 076 inlägg
#9

okidoki! :bire

262 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)