[c#] immutable properties van een object

Moderators: jkien, Xilvo

Reageer
Gebruikersavatar
Berichten: 829

[c#] immutable properties van een object

Ik wil een orde definiëren in om het even wat voor type objecten. Maar een orde die niet meer kan veranderen eenmaal een object gecriëerd is. M.a.w. de orde is niet anders op het moment dat er een eigenschap aangepast wordt. Hiervoor had ik gedacht aan het adres waar het object in kwestie zich bevindt, maar ik weet niet zeker of dit eigenlijk wel altijd hetzelfde blijft (zijn er geen omstandigheden waarin het adres eens zou kunnen veranderen, bijvoorbeeld bij Garbage Collecting). Mijn vraag is dus of het adres van een object immutable is, of indien dit niet zo is, of er andere eigenschappen zijn die wel immutable zijn. De hashcode is bijvoorbeeld geen goed idee, daar sommige klasses die code doen veranderen indien de velden aangepast worden.
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."

--Vladimir Lenin-- (Владимир Ильич Ульянов)

Berichten: 158

Re: [c#] immutable properties van een object

Als ik je goed begrijp zoek je naar een eigenschap die nooit van waarde veranderd van een willekeurig (mogelijk door iemand anders geimplementeerd) object? Moet die waarde uniek voor elk object zijn?

Inderdaad, door garbage collection is het adres van een object niet vast, tenzij het 'pinned' is (maar dat is vrijwel nooit zo want dat schaadt de prestaties van de collector). Enkele eigenschappen die ik zo kan verzinnen zijn: de naam van het type object, de geheugengrootte van het type object (aantal bytes in het geheugen verandert niet), maar deze zijn beide (samen) hooguit uniek voor het type object en niet voor elk object afzonderlijk.

Nog sterker, neem twee valuetypes met dezelfde waarde, bijvoorbeeld Point p1 = new Point(0, 0) en Point p2 = new Point(0,0). Werkelijk het enige dat deze twee objecten onderscheid is hun adres, en dat is dus niet immutable.

Waarvoor wil je die eigenschap gebruiken?
"Niet gehinderd door enige kennis van zaken..."

Gebruikersavatar
Berichten: 7.224

Re: [c#] immutable properties van een object

Je zou in de constructor van een object een UID (unique identifier) kunnen genereren en deze toekennen aan een read-only property
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

Berichten: 158

Re: [c#] immutable properties van een object

En als je dit voor een willekeurig object wilt doen, waarbij je geen controle hebt over de broncode, kan je het object in een Generic klasse wikkelen, bijvoorbeeld een Unique<T> object waarbij je Bart's suggestie gebruikt om een unieke waarde toe te kennen aan elk object.
"Niet gehinderd door enige kennis van zaken..."

Reageer