AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

out vs. ref

Ein Thema von Pseudemys Nelsoni · begonnen am 3. Mär 2006 · letzter Beitrag vom 3. Mär 2006
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

out vs. ref

  Alt 3. Mär 2006, 13:28
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.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: out vs. ref

  Alt 3. Mär 2006, 13:33
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

Re: out vs. ref

  Alt 3. Mär 2006, 13:52
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: out vs. ref

  Alt 3. Mär 2006, 13:59
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...
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: out vs. ref

  Alt 3. Mär 2006, 14:07
Ah, besten Dank. Dann kann man ja gleich immer "out" nehmen statt "ref" oder?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#6

Re: out vs. ref

  Alt 3. Mär 2006, 14:13
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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