Springen naar inhoud

[c#] immutable properties van een object


  • Log in om te kunnen reageren

#1

Vladimir Lenin

    Vladimir Lenin


  • >250 berichten
  • 829 berichten
  • Ervaren gebruiker

Geplaatst op 26 augustus 2009 - 11:49

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-- (Владимир Ильич Ульянов)

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

virtlink

    virtlink


  • >100 berichten
  • 158 berichten
  • Ervaren gebruiker

Geplaatst op 26 augustus 2009 - 17:51

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..."

#3

Bart

    Bart


  • >5k berichten
  • 7224 berichten
  • VIP

Geplaatst op 26 augustus 2009 - 18:38

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

#4

virtlink

    virtlink


  • >100 berichten
  • 158 berichten
  • Ervaren gebruiker

Geplaatst op 27 augustus 2009 - 15:16

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..."





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures