![]() |
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. |
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.
|
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:
ich hoff, es wird damit etwas verständlicher.
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 } greetz Mike |
Re: out vs. ref
Zitat:
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... |
Re: out vs. ref
Ah, besten Dank. Dann kann man ja gleich immer "out" nehmen statt "ref" oder?
|
Re: out vs. ref
Zitat:
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 06:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz