/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
ByRef og ByVal
Fra : Mogens Dyhre Hansen


Dato : 30-01-03 09:36

Hej

Jeg sidder og kigge på noget kode hvor eks.

Function EtellerAndet(byVal Formentligensub _
ByRef Formentligenandensub)

hvad betyder ByRef og ByVal entlig? og hvad gør de?


--
Mogens D. Hansen
http://www.svend-bent.dk/


 
 
John Doe (30-01-2003)
Kommentar
Fra : John Doe


Dato : 30-01-03 10:21

ByRef tager referencen til en paramter

ByVal tager værdien.

ByRef ex.

sub test1(ByRef i as Integer)
'debug.print i
i = i + 1
debug.print i
end sub


Private Sub Form_Load()

dim mit_i a integer
mit_i = 6
msgbox mit_i

test1 mit_i

msgbox mit_i

End Sub


Læg mærke til - at når "i" i test1 tildeles værdien i + 1 , er det ikke "i"
men referencen til "i"

prøv ad..


robert


"Mogens Dyhre Hansen" <mogens[removethis]@svend-bent.dk> wrote in message
news:3e38e37b$0$118$edfadb0f@dtext02.news.tele.dk...
> Hej
>
> Jeg sidder og kigge på noget kode hvor eks.
>
> Function EtellerAndet(byVal Formentligensub _
> ByRef Formentligenandensub)
>
> hvad betyder ByRef og ByVal entlig? og hvad gør de?
>
>
> --
> Mogens D. Hansen
> http://www.svend-bent.dk/
>



Tomas Christiansen (30-01-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 30-01-03 12:08

John Doe skrev:
> ByRef tager referencen til en paramter
>
> ByVal tager værdien.
....

Jeg synes ikke at det på en klar måde forklarer hvilken effekt
'reference-overført' versus 'værdi-overført' har i Visual Basic <= 6.0
(der _er_ sprog hvor effekten er en anden end i VB).

- - - - - - - - - -

Angående: ByVal
Metode: Værdi-overførsel
Eksempel: Sub AAA (ByVal X As Long)
Kald: Call AAA (Y)

Ved kald af AAA, oprettes en lokal variabel X, og værdien af den
aktuelle parameter Y (den variabel eller værdi der benyttes i kaldet af
AAA) kopieres ind i X.
Hvis værdien af X ændres i proceduren, har det ingen betydning for Y.
Hvis værdien af Y ændres i proceduren, har det ingen betydning for X.
Variablen X arbejder altså helt lokalt. Der kan godt samtidig eksistere
en global variabel X, som ikke har noget med den lokale X at gøre.

- - - - - - - - - -

Angående: ByRef
Metode: Reference-overførsel.
Eksempel: Sub AAA (ByRef X As Long)
Kald: Call AAA (Y)

Ved kald af AAA, overføres referencen til den aktuelle parameter.
Man kan opfatte det som at X blot er et 'alias' til den variabel, som
man overførte i kaldet.
Hvis værdien af X ændres i proceduren, ændres værdien i Y også.
Hvis værdien af Y ændres i proceduren, ændres værdien i X også.
Variablen X arbejder altså ikke lokalt, men direkte på variablen i den
aktuelle parameter (Y).

- - - - - - - - - -

-------
Tomas


Ole Nielsby (30-01-2003)
Kommentar
Fra : Ole Nielsby


Dato : 30-01-03 17:39


Mogens Dyhre Hansen skrev:

> hvad betyder ByRef og ByVal entlig? og hvad gør de?

Her er en rent praktisk forklaring:

Brug ByVal til at overføre data til en procedure.
Brug ByRef til at overføre data til og fra en procedure.

Hvis du f.eks. har en funktion der skal aflevere flere
resultater, kan du aflevere et af dem som funktionsresultat
og skrive de andre i ByRef-parametre.

Brug kun ByRef når det er nødvendigt. Kode med ByRef
er sværere at gennemskue, fordi man ikke kan se hvornår
en variabel ændrer værdi.

I VB6 er argumenter normalt ByRef hvis ikke man
udtrykkeligt skriver ByVal.

I VB.NET er det omvendt.



John Doe (30-01-2003)
Kommentar
Fra : John Doe


Dato : 30-01-03 19:03

> I VB6 er argumenter normalt ByRef hvis ikke man
> udtrykkeligt skriver ByVal.

For objekter ----- IKKE for typer som string, int, bool et c



Tomas Christiansen (30-01-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 30-01-03 21:33

John Doe skrev:
> > I VB6 er argumenter normalt ByRef hvis ikke man
> > udtrykkeligt skriver ByVal.
>
> For objekter ----- IKKE for typer som string, int, bool et c

I VB 6.0 _er_ ByRef standard hvis man ikke eksplicit angiver
ByRef/ByVal.
I VB 6.0 findes ikke int eller bool.

-------
Tomas


John Doe (31-01-2003)
Kommentar
Fra : John Doe


Dato : 31-01-03 08:46

>I VB 6.0 _er_ ByRef standard hvis man ikke eksplicit angiver
>ByRef/ByVal.

Jeg vrøvler - kan endda dokumentere det

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/ht
ml/vastmfunction.asp

> I VB 6.0 findes ikke int eller bool.

Aha

type Optional. Data type of the argument passed to the procedure; may
be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not
currently supported) Date, String (variable length only), Object, Variant,
or a specific object type. If the parameter is not Optional, a user-defined
type may also be specified.


Snipout fra ovenstående link

Jeg referede til den generelle type - ikke det specifikke navn i vb - -
anyway - ByRef og Byval er som I proklamerer.



Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408879
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste