c# ref?

Tags:    c#

Hej

Er der nogle som kan vise og forklare hvordan ref bruges i C# under konsol programmering.

har er lille konsol program der udregner areal af en kasse
jeg indtaster høj bredde længde.
jeg skal så få resultatet via en ref.

Håber der er en der kan fortælle hvordan dan man skal bruge ref.




4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Når en funktion kaldes i C# overføres argumenterne som regel by-copy. Det vil sige at hvis du kalder en funktion med f.eks. en int som argument, kan du ikke udenfor funktionen se ændringer til argumentet....


Ja, hvis det er en primitiv datatype. Det er almindelige variable der er tale om, hvis du sender et objekt med ned, er det jo altid by reference, mens primitive datatyper altid er by value.


Nej, det er ikke helt korrekt. Det er rigtig at selve objektet ikke kopieres. Men det er stadig by-copy - det er blot referencen der kopieres. Derfor er der forskel på om du bruger ref eller ikke ref også når argumentet er en objekterference.

Hvis dit argument er en reference til et objekt, og du kalder en metode uden ref, altså bruger by-copy, kopieres referencen (og ikke objektet). Så hvis du f.eks. inde i metoden sætter referencen til at pege på et andet objekt påvirker det ikke den oprindelige reference (som stadig vil pege på det første objekt.

Hvis du derimod bruger ref med en objektreference kopieres referencen ikke, men i stedet er argumentet nu en reference til en reference. Det betyder at hvis du inde i metoden sætter referencen til at peget på et nyt objekt vil den oprindelige reference udenfor metoden nu også pege på det nye objekt.

Uden ref er metodekald altid by-copy. Hvad der kopieres er forskellig afhængig hvad slags datatype argumentet er:

Hvis argumentets datatype er:

*en primitiv datatype, eller en struct, kopieres hele objektet
*en objektreference kopieres referencen

Hvis du bruger ref ved metodekald, og argumentets datatype er:

*en primitiv datatype eller struct, er parameteren inde i metoden nu en reference til det oprindelige objekt som nu kan ændres inde i metoden
*en objektreference, er parameteren inde i metoden nu en reference til en objektreference, så nu kan du faktisk både manipulere det oprindelige objekt, men også den oprindelige reference (f.eks. ved at lade den peget på et nyt objekt)





Indlæg senest redigeret d. 04.02.2008 12:04 af Bruger #4522
Prøv at kigge her:
http://msdn2.microsoft.com/en-us/library/14akc2c7.aspx

Som jeg forstår det så er det det samme som hvis man initialiserer en variabel i C++ med &.

F.eks.

Fold kodeboks ind/udKode 


med ref

Fold kodeboks ind/udKode 




Når en funktion kaldes i C# overføres argumenterne som regel by-copy. Det vil sige at hvis du kalder en funktion med f.eks. en int som argument, kan du ikke udenfor funktionen se ændringer til argumentet.

Som Martin fint viser i sine to kodeeksempler forholder det sig anderledes med ref. Når du bruger ref overføres argumentet som en reference, hvilket betyder at når du manipulerer argumentet er det den oprindelige variabel du arbejder med og ikke en kopi.



Når en funktion kaldes i C# overføres argumenterne som regel by-copy. Det vil sige at hvis du kalder en funktion med f.eks. en int som argument, kan du ikke udenfor funktionen se ændringer til argumentet....


Ja, hvis det er en primitiv datatype. Det er almindelige variable der er tale om, hvis du sender et objekt med ned, er det jo altid by reference, mens primitive datatyper altid er by value.



Indlæg senest redigeret d. 04.02.2008 08:46 af Bruger #2730
t