/ 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
ByVal på objekter?
Fra : Stefan Kristensen


Dato : 07-07-05 16:21

Hej NG.

Jeg har en procedure der opretter et collection objekt og sender det til
anden procedure. Hvordan undgår jeg at de ændringer, den anden procedure
laver i objektet, 'slå igennem' i den første procedure?
Jeg har prøvet at overføre objektet som ByVal, men det virker ikke. Jeg
mener også at kunne huske, at objekter altid overføres ByRef? Men hvad
gør man så?

Mvh
Stefan

 
 
preben nielsen (07-07-2005)
Kommentar
Fra : preben nielsen


Dato : 07-07-05 18:57


"Stefan Kristensen" <jems@madFJERN.dk> skrev i en meddelelse
news:42cd4868$0$18636$14726298@news.sunsite.dk...
> Hej NG.
>
> Jeg har en procedure der opretter et collection objekt og sender
> det til anden procedure. Hvordan undgår jeg at de ændringer, den
> anden procedure laver i objektet, 'slå igennem' i den første
> procedure?
> Jeg har prøvet at overføre objektet som ByVal, men det virker
> ikke. Jeg mener også at kunne huske, at objekter altid overføres
> ByRef? Men hvad gør man så?

Hvorfor ændrer dine procedurer på de objekter, de får overført som
parametre ??

/\ preben nielsen
\/\ prel@post.tele.dk



Stefan Kristensen (07-07-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 07-07-05 21:53

>>Jeg har en procedure der opretter et collection objekt og sender
>>det til anden procedure. Hvordan undgår jeg at de ændringer, den
>>anden procedure laver i objektet, 'slå igennem' i den første
>>procedure?
>
> Hvorfor ændrer dine procedurer på de objekter, de får overført som
> parametre ??

Fordi den skal?
Den første procedure kører i en løkke der kalder den anden procedurer
med nogle parametre genereret i løkken. Den anden procedurer ændrer så i
nogle tilfælde en enkelt parameter og sender så objektet videre til en
tredie procedure. Næste gang den første procedurer (i løkken) kalder den
næste procedure, skal den ændrede parameter have den originale værdi.
Jeg kan selvfølgelig gemme denne værdi i ene variabel og sætte
parameteren før kaldet til den næste procedure, men jeg synes det ville
være mere elegant at kunne overføre objektet som ByVal.

Mvh
Stefn

preben nielsen (08-07-2005)
Kommentar
Fra : preben nielsen


Dato : 08-07-05 14:49


"Stefan Kristensen" <jems@madFJERN.dk> skrev i en meddelelse
news:42cd962e$0$18646$14726298@news.sunsite.dk...
>>>Jeg har en procedure der opretter et collection objekt og
>>>sender det til anden procedure. Hvordan undgår jeg at de
>>>ændringer, den anden procedure laver i objektet, 'slå igennem'
>>>i den første procedure?
>>
>> Hvorfor ændrer dine procedurer på de objekter, de får overført
>> som parametre ??
>
> Fordi den skal?
> Den første procedure kører i en løkke der kalder den anden
> procedurer med nogle parametre genereret i løkken. Den anden
> procedurer ændrer så i nogle tilfælde en enkelt parameter og
> sender så objektet videre til en tredie procedure. Næste gang
> den første procedurer (i løkken) kalder den næste procedure,
> skal den ændrede parameter have den originale værdi.

Hvis procedure 2 skal videregive et ændret object til procedure 3,
så ville jeg lave et nyt object i procedure 2 med de nødvendige
ændringer og derefter bruge dét i kaldet til procedure 3.

Ellers gem den parameter som du ændrer i procedure 2 i en variabel
og sæt den tilbage efter kaldet af procedure 3.

Procedurer med sideeffects er fandens værk


--
/\ preben nielsen
\/\ prel@post.tele.dk



Tomas Christiansen (08-07-2005)
Kommentar
Fra : Tomas Christiansen


Dato : 08-07-05 23:23

preben nielsen skrev:
> Hvis procedure 2 skal videregive et ændret object til procedure 3,
> så ville jeg lave et nyt object i procedure 2 med de nødvendige
> ændringer og derefter bruge dét i kaldet til procedure 3.
....
> Procedurer med sideeffects er fandens værk

Meget ofte definerer man en metode Clone() på alle sine objekter. Denne
metode skal returnere en klon - altså en ny instans, men med samme
datamæssige indhold - af objektet.

VB hjælper ikke her. Man er nødt til selv at smøge ærmerne op og gå i gang
med at oprette klone-metoder...

-------
Tomas

Stefan Kristensen (09-07-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 09-07-05 21:53

> Hvis procedure 2 skal videregive et ændret object til procedure 3,
> så ville jeg lave et nyt object i procedure 2 med de nødvendige
> ændringer og derefter bruge dét i kaldet til procedure 3.
>
> Ellers gem den parameter som du ændrer i procedure 2 i en variabel
> og sæt den tilbage efter kaldet af procedure 3.

Det blev også løsningen

> Procedurer med sideeffects er fandens værk
Ja. Jeg brugte over en time på at finde ud af hvorfor den parameter lige
pludselig ikke var rigtig mere :-$

Mvh
Stefan

Søg
Reklame
Statistik
Spørgsmål : 177449
Tips : 31962
Nyheder : 719565
Indlæg : 6408125
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste