Avatar billede lasserasch Juniormester
15. marts 2008 - 12:48 Der er 9 kommentarer og
1 løsning

Omkring at arbejde med objekter og sætte værdier herfor

Hejsa.

Jeg er ved at bevæge mig ind i OOP verdenen, som har taget lang tid at forstå, men jeg tror den er ved at være der.

Jeg har lige et hurtigt spørgsmål.

Jeg har i mit program et objekt som er en "Kalkulation". Denne har forskellige værdier, som f.eks. "Navn", "Kalkuleret Pris" samt andre objekter i form af "Delkalkulationer".

Anyway, hvis jeg f.eks. gør sådan her :

Kernel.Calculations.Maincalculation.Calculation C1 = new Kernel.Calculations.Maincalculation.Calculation();
C.Name = "Test1";
Kernel.Calculations.Maincalculation.Calculation C2 = C1;

C2 er altså en kopi af C1.

Hvis jeg så ændrer en værdi på C1, kan det så passe at den værdi også bliver ændret på C2?

Og hvis ja, hvorfor? Og kan man undgå det? Jeg har et sted i mit program hvor jeg ønsker en kopi af et objekt, men ikke ønsker at ændre kopiens værdier, kun værdierne for det oprindelige objekt.

/Lasse
Avatar billede nielle Nybegynder
15. marts 2008 - 12:58 #1
> Kernel.Calculations.Maincalculation.Calculation C2 = C1;

Med denne linje søtter du C2 til at pege på objektet C1.

> Hvis jeg så ændrer en værdi på C1, kan det så passe at den værdi også bliver ændret på C2?

Ja, for det det samme objekt.

> C2 er altså en kopi af C1.

Nej, det er den nemlig ikke - det er der samme objekt som er i begge variable.
Avatar billede nielle Nybegynder
15. marts 2008 - 13:00 #2
Den eneste måde at gøre det på er noget i stil over denne basale opskrift:

Kernel.Calculations.Maincalculation.Calculation C1 = new Kernel.Calculations.Maincalculation.Calculation();
C1.Name = "Test1";

Kernel.Calculations.Maincalculation.Calculation C2 = new Kernel.Calculations.Maincalculation.Calculation();
C2.Name = C1.Name;
Avatar billede nielle Nybegynder
15. marts 2008 - 13:04 #3
Der findes mere eller mindre elegante måder at "pakke dette ind" på:

- Oprette en constructor til Calculation-klassen som opretter en ny instans ud af en eksisterende.

- Eller at lade Calculation-klassen implementere IClonable interfacet.

Den basele opskrift går dog igen ... kopierer de relevante felter i klassen.
Avatar billede kalp Novice
15. marts 2008 - 13:13 #4
lav en metode i dit klasse som tager en type af sig selv med som parameter..
kald metoden for noget med

public void CopyClass(Kernel.Calculations.Maincalculation.Calculation calculation)
{
  Name = calculation.Name;
  /osv.
}

det er vel pænere end det andet i hvertfald.
Avatar billede nielle Nybegynder
15. marts 2008 - 13:15 #5
15/03-2008 13:13:28> Det er stort set det man gør når man lader klassen om at implementere IClonable
Avatar billede kalp Novice
15. marts 2008 - 13:15 #6
nielles sidste bud er også pænt:)
(læste ikke alle dine indlæg;D )
Avatar billede kalp Novice
15. marts 2008 - 13:15 #7
nielle >> yeps.. jeg fik ikke læst din sidste kommentar:)
Avatar billede lasserasch Juniormester
15. marts 2008 - 15:23 #8
Ja okay, det kan jeg godt se...
Tak for svaret drenge...

Smid svar for points!
Avatar billede nielle Nybegynder
15. marts 2008 - 15:59 #9
Svar :^)
Avatar billede kalp Novice
16. marts 2008 - 02:30 #10
jeg behøver ikke point;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester