Avatar billede juks Novice
08. maj 2010 - 10:20 Der er 5 kommentarer og
1 løsning

ref double ? hvad gør ref

hej ,
ja er der nogle der kan forklare mig hvorfor man skriver ref double i stedet for double



fx
public void Sort(double[] distance,int startPos,int endPos)
versus
public void Sort(ref double[] distance,int startPos,int endPos)
Avatar billede janus_007 Nybegynder
08. maj 2010 - 10:41 #1
ref er hypersmart, forudsat men ved hvad man laver :)

Ved at bruge ref, kan du ændre variabel værdien inde i metoden og din ref vil efterfølgende være ændret ligeledes.


public void Sort(double[] distance,int startPos,int endPos)
versus
public void Sort(ref double[] distance,int startPos,int endPos)
{
double = some new value;
}
Nu ved jeg ikke lige om jeg ville bruge en ref i denne signatur, men pyt..

double[] dist;

Kald til Sort
Sort(ref dist,0,99)

Og dist er ændret til some new value.
Avatar billede juks Novice
08. maj 2010 - 11:00 #2
det jeg har brug for at holde styr på hvilke ruter der er blevet ændret---
dvs at hvis jeg sender rute (1,2,3)s distancer afsted. med længden (5,7,5)
og den sortere dem  (1,3,2) så ved den inde i min metode de er ændret eller ?
Avatar billede janus_007 Nybegynder
08. maj 2010 - 13:09 #3
Du mener i caller-metoden der bruger metoden med ref parameteren? Ja!
Avatar billede juks Novice
08. maj 2010 - 13:20 #4
ja ,lige netop ... det er jo en super feature .. hvorfor har du ikke fortalt det noget før :-)
Avatar billede janus_007 Nybegynder
08. maj 2010 - 19:47 #5
haha... ja, den er faktisk lidt undervurderet, men ved overforbrug kan programmet kompliceret unødigt. En klasse bør kun have en et ansvar, så husk kun at bruge den imellem metodekald indeni samme klasse.
http://en.wikipedia.org/wiki/Single_responsibility_principle
Avatar billede clausc Nybegynder
11. maj 2010 - 16:10 #6
Lidt yderligere info:
ref bruges osse til kald mod native DLL'er, f.eks. Win32API'et. Skal der eksempelvis bruges en pointer til en long i et API-kald, så er det lettest at mappe c# wrapperen som en 'ref long'.

Det antyder så osse, at
public void Sort(ref double[] distance,int startPos,int endPos) {
  double = some new value;
}
arbejder på pointeren distance.

I nogle situationer kan man vinde lidt performance ved at bruge ref parametre fremfor 'normale' parametre. Men det er på bekostning af risiko for side-effekter!

Endelig har 'ref' en stedbror kaldet 'out'. Osse nyttig i nogle situationer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB