unterschied ref, output
-
Hi,
was ist der unterschied zwischen output und ref? was ich so mibekommen habe hat das mit der initialisierung
des params. den man übergibt zu tun? ist in c# eine int i; nicht auch schon initialisiert?
lg
-
Es gibt entscheidende Unterschiede:
Bei ref muss die Variable initialiert übergeben werden, d.h. die Methode, die die Variable kriegt, muss sie gleich auslesen können dürfen. Außerdem kann die Methode, muss aber nicht, den Wert der Variablen ändern.
Bei out kann die Variable uninitialisiert sein. Folgender Code ist legal:
int i; foo(out i);
Die Methode muss außerdem mindestens eine Zuweisung an die Variable machen. Sie darf die Variable selber erst lesen, wenn sie eine Zuweisung gemacht hat und muss immer mindestens einmal einen Wert zuweisen. Nach der Methode gilt sie als initialisiert, das heißt, du kannst oben das i nach dem Aufruf verwenden.
-
Hi!
rolfi schrieb:
was ich so mibekommen habe hat das mit der initialisierung
des params. den man übergibt zu tun?Genau. Ref-Parameter müssen bei Aufruf initialisiert sein. Out-Parameter
müssen bei Aufruf noch nicht initialisiert sein, müssen aber in der Methode
einen Wert zugewiesen bekommen.rolfi schrieb:
ist in c# eine int i; nicht auch schon initialisiert?
Nein.
Jockel
-
Sobald man "out" als Parametertyp angibt, muß die Funktion den Parameter zwingend setzen, während eine Referenz("ref") meistens benutzt wird, wenn man sowohl einen Wert bei Übergabe hat als auch den Wert wieder verändern will.
Beispielpublic void f1(out int x) { x = 10; } public void f2(ref int x) { x = x + 42; } public void Main() { int x1; int x2 = 100; f1(out x1); <- x1 = 10; f2(ref x2); <- x2 = 142; // aber f1(out x2); // Wert wird überschrieben, ohne benutzt zu werden f2(ref x1); // Fehler: Wert ist uninitialisiert! }
-
hi,
wo liegt hier der unterschied? danke im vorhinein...
bye
-
wo liegt hier der unterschied?
x2 wurde initialisiert und x1 nicht - ließ dir nochmal aufmerksam die antworten durch
-
hi,
lies mal die überschrift;-)
also es geht um den unterschied: unterschied Equals, GetHashCode()bye
-
WTF?
-
Optimizer hat es doch schon klar und deutlich beschrieben....
-
rofli hat "unterschied Equals, GetHashCode()" als Antwort-Titel geschrieben.
Sowas überliest man ziemlich schnell. Am besten gar nicht nutzen!
-
mach nen neuen thread...bye
-
Ok, sorry. In diesem Forum benutzt keiner die Titel, sowas sieht man nicht. Am besten, du machst wirklich einen neuen Thread dafür.
-
rolfi das Feld musst du wenn du eine Antwort schreibst nicht ausfüllen. Es macht 0 Sinn da irgendwie Hm oder ähnliches reinzuschreiben.
-
und deckel drauf...