Einzelnen Beitrag anzeigen

Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#1

Parameter-Übergabe: normal, var, const

  Alt 2. Jan 2011, 19:55
Delphi-Version: 2007
Hi,

es geht mir um die Übergabe komplexer Variablen (Objekten) in Prozedur-/Funktionsaufrufen.
Ich habe folgende Vermutungen, bin aber nicht ganz sicher, ob sie so stimmen.

Gehen wir von folgendem Beispielcode aus (TObj sei ein komplexes Objekt):

Delphi-Quellcode:
procedure proc1()
var
  var1: TObj;
begin
  var1 := TObj.create();
  proc2(var1);
end;

Fall 1:

procedure proc2(a: TObj)
--> Ich kann jetzt etwas am Objekt ändern (a.caption:='aa' ) nicht aber das Objekt komplett austauschen (a:=TObj.create(); ) sodass dies auch Auswirkungen auf proc1 hätte (var1 zeigt immer noch auf das ursprüngle TObj.), da ein Kopie des Objektzeigers bei der Übergabe angelegt wurde.


Fall 2:

procedure proc2(var a: TObj)
--> Ich kann jetzt sowohl etwas am Objekt ändern (a.caption:='aa' ) wie auch das Objekt komplett austauschen (a:=TObj.create(); ) sodass dies auch Auswirkungen auf proc1 hat (hier wurde also auch var1 "ausgetauscht") - der "Original-Zeiger" wurde also übergeben.




Fall 3:

procedure proc2(const a: TObj)
--> Ich kann jetzt etwas am Objekt ändern (a.caption:='aa' ) nicht aber das Objekt komplett austauschen (a:=TObj.create(); ) - hier schmeißt mir der Compiler es um die Ohren, da ich versuche, etwas konstantes zu verändern.


Stimmt das soweit?
Falls ja, so ist der Unterschied zwischen Fall 1 und Fall 3 doch recht gering, oder? Zumindest nach "außen" (also aus Sicht von proc1).

Kann dazu noch jemand etwas mehr sagen?


Dann eine weitere Nachfrage:
Auch in Fall 3 ist es ja so, dass ich weiterhin Änderungen am Objekt vornehmen kann, oder?
Also const ist lediglich der Zeiger auf das Objekt - nicht aber der "Inhalt" des Objektes selbst - richtig?


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat