Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   C# out vs. ref (https://www.delphipraxis.net/64420-out-vs-ref.html)

Pseudemys Nelsoni 3. Mär 2006 12:28


out vs. ref
 
Moin,

wo genau liegt der Unterschied zwischen diesen beiden "Teilen" ? Ich hab gelesen, dass man out generell als Ausgangs- und ref als Eingangsparameter benutzen sollte... Nur was heisst das genau? Für mich tun sie beide das gleiche.

DGL-luke 3. Mär 2006 12:33

Re: out vs. ref
 
Naja, das is so wie in D.Win32 out, var und const. Das gibt genau denselben Assembler-Code (Übergabe der Adresse), die Unterscheidung dient nur dazu, dass der Code verständlicher wird.

JasonDX 3. Mär 2006 12:52

Re: out vs. ref
 
Na ja, es hat noch zusätzliche Auswirkungen:

Ein out-Parameter muss nicht initialisiert sein, da er eigentlich ja nur ein "rückgabewert" ist. In der Prozedur, in der ein out-Parameter verwendet wird, wird deshalb auch nicht vorausgesetzt, dass dieser Bereits initialisiert ist - im Gegensatz zu einem ref-Parameter.
Ein ref-Parameter muss initialisiert sein, bevor er übergeben wird.
bsp:
Code:
public void a(out int h)
{
  if (h != 1) //Klappt nicht, da h noch nicht zwingend initialisiert ist
    return;
  h = 0;
}

public void b(ref int h)
{
  if (h != 1) //Klappt, da h aufgrund des ref initialisiert sein muss
    return;
  h = 0;
}

public void call()
{
  int h;
  a(out h);
  b(ref h); //klappt nicht, da h nicht initialisiert ist
  h = 1;
  b(ref h); //jetzt klappt auch das
}
ich hoff, es wird damit etwas verständlicher.

greetz
Mike

SubData 3. Mär 2006 12:59

Re: out vs. ref
 
Zitat:

Zitat von DGL-luke
die Unterscheidung dient nur dazu, dass der Code verständlicher wird.

Sehe ich anders..

Out: Der "ursprüngliche" Wert dieser Variable ist in der Prozedur / Funktion nicht vorhanden
Var: Der Parameter kann geändert werden und ist dann auch als Aufrufparameter geändert
Const: Der Parameter kann nicht geändert werden...

Pseudemys Nelsoni 3. Mär 2006 13:07

Re: out vs. ref
 
Ah, besten Dank. Dann kann man ja gleich immer "out" nehmen statt "ref" oder?

JasonDX 3. Mär 2006 13:13

Re: out vs. ref
 
Zitat:

Zitat von Pseudemys Nelsoni
Ah, besten Dank. Dann kann man ja gleich immer "out" nehmen statt "ref" oder?

Nein. out verwendest du, wenn du über den Parameter nur eine Ausgabe erwartest. ref verwendest du, wenn der Parameter bei der Übergabe noch einen Wert enthält, der in der Methode eine Rolle spielt.
Wenn du bspw. einen Parameter in der Methode nur verändern willst, nimmst du ref. Wenn du über einen Parameter einen "Rückgabewert" haben willst, nimmst du out.

greetz
Mike


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz