[C#] Parameter functie wordt ongewild aangepast

Pagina: 1
Acties:

  • CyberThijs
  • Registratie: Maart 2004
  • Laatst online: 16:54
Ik zit met volgend probleem:

ik heb een object a, die ik doorgeef aan functie x. Intern past functie x dit object aan tijdens de verwerking ervan.

Als ik dan echter verder reken met de object a in de functie die functie x heeft aangeroepen, dan merk ik dat deze aangepast is zoals in functie x gebeurd, terwijl dit absoluut niet de bedoeling was..

Ik maak geen gebruik van keywords zoals "ref" of "out" bij het aanroepen van de functie x ..

Wat loopt er dan toch verkeerd?

  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

Als je een object doorgeeft, geef je in feite het adres van het object door, niet het object zelf. Dit object kan ook gewoon aangepast worden door de functie. Dit in tegenstelling tot value types, daarvan wordt de waarde doorgegeven, tenzij je ref gebruikt.

Als het absoluut niet de bedoeling is dat die functie het object aanpast, heb je twee mogelijkheden: pas de functie aan, of gebruik een andere functie ;)
Je zou ook een 'omweg' kunnen gebruiken. Maak een kopie van het object, en geef de kopie aan die functie. Maar dit is niet altijd geschikt, afhankelijk van wat de functie precies met het object doet.

[ Voor 44% gewijzigd door Zr40 op 25-03-2006 11:12 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:32
Lees eens in de MSDN het stukje over Reference Types. Daar zal je zien dat als je een instantie van een class (dat een reference type is), doorgeeft aan een method, je de 'reference' doorgeeft. De referentie zelf kan je niet wijzigen als je geen ref specifieert, maar, het stuk geheugen op de heap, waar die referentie naar wijst, kan je wel aanpassen.
De referentie die je doorgeeft aan de method, wijst dus eigenlijk naar hetzelfde object als de referentie buiten de method.

Als je dit niet wilt, zal je een clone moeten doorgeven.
A data type that is represented by a reference (similar to a pointer) to the type's actual value. If a reference type is assigned to a variable, that variable references (or "points to") the original value. No copy is made. Reference types comprise classes, interfaces, delegates, and boxed value types.

https://fgheysels.github.io/


  • CyberThijs
  • Registratie: Maart 2004
  • Laatst online: 16:54
OK, bedankt..

Het verschil tussen objects en value types is me nu (eindelijk) duidelijk geworden..

Bedankt voor alle moeite! :)