Archief - C# Objecten 'verbonden' ?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Rage

Legacy Member
Ik was mijn code aan het opschonen, en ik heb iets vreemd voor. Het werkt terwijl het niet zou moeten werken :)

Ik maak een object aan. Ik steek dat object in een lijst. Ik steek datzelfde object ook ergens anders in. Ik maak een object aan van een andere klasse, en daar steek ik dat eerst object dus in. Als ik in mijn lijst dat object aanpas, verandert dat dan ook op die andere plaats?

Lees spoiler als mijn uitleg vaag is

- Ik heb een klasse ControlPoint, en ik maak nu 2 punten aan.

ControlPoint punt1 = new ControlPoint();
punt1.X = 10;
punt1.Y = 10;

ControlPoint punt2 = new ControlPoint();
punt2.X = 20;
punt2.Y = 20;

- Ik heb een klasse Segment, en zo een segment heeft 2 punten nodig.

Segment segment1 = new Segment();
segment1.point1 = punt1;
segment1.point2 = punt2;

- Ik heb ook een lijst waar alle punten inzitten

List<ControlPoint> puntenlijst = new List<ControlPoint>();
puntenlijst.Add(punt1);
puntenlijst.Add(punt2);


Nu mijn vraag

Als ik een punt in puntenlijst aanpas, dan verandert het punt in het segment ook?

Ik sla elk punt dubbel op: 1 keer in segment en 1 keer in een lijst. Maar dat blijft 1 en hetzelfde object? Klopt dat?

Ik heb geen andere verklaring voor het gedrag van mijn programma, ik ben mijn kop hierover aant breken :doh:

Destiser

Legacy Member
zelfgemaakte objecten (klasses dus) zijn referentietypes.

Dus, als ge een object van een referentietype gaat opslaan in twee verschillende lijsten, dan bevatten die lijsten geen kopie van dat object, maar een adresverwijzing naar dat object. Het gevolg is dan dat beide lijsten een 'link' bevatten naar hetzelfde object. Dus, als ge 't object wijzigt in de eerste lijst, dan zal het ook gewijzigd worden in de tweede lijst, simpelweg omdat het eigenlijk maar 1 object is die wordt gewijzigd (want beide lijsten bevatten gewoon een link naar het origineel toegevoegde object)

Dit wat snel uitgelegd :p begrijp je wat ik bedoel?

NeverwinterX

Legacy Member
Misschien helpt het om er op de volgende manier over na te denken: een object op zich is een doosje met daarin wat informatie. Een variabele met daaraan dat object toegewezen is een pijl die wijst naar dat doosje. Variabelen met hetzelfde object daaraan toegewezen wijzen allemaal naar hetzelfde doosje. Iets aanpassen aan een variabele is die pijl volgen en het aanpassen in het doosje naar waar het leidt.

Uitzondering zijn de primitieve types zoals int en structures.

Cycloon

Legacy Member
Je zou het ook gewoon kunnen testen door een object aan te maken, dat in 2 lijsten te steken, er eentje aan te passen en te kijken wat er met dat object in de andere lijst is gebeurd. Maar dat was wel érg ver gezocht uiteraard :)

Rage

Legacy Member
Destizer zijn uitleg was voldoende, het is dus wat ik vermoedde.

Het is duidelijk nu, bedankt!

Cycloon: ge hebt gelijk, dat had ik kunnen doen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan