AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Record als Prozedurparameter: Werte direkt übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Record als Prozedurparameter: Werte direkt übergeben

Ein Thema von Codehunter · begonnen am 17. Jul 2018 · letzter Beitrag vom 17. Jul 2018
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Record als Prozedurparameter: Werte direkt übergeben

  Alt 17. Jul 2018, 08:30
Dumme Frage: Macht es praktisch einen Unterschied ob man dem Record nun eine static class function Init(..) oder einen constructor Create(..) gibt?
Schauen wir es uns anhand eines praktischen Beispiels an:

Delphi-Quellcode:
program Project5;

{$APPTYPE CONSOLE}

{$R *.res}


uses
  System.SysUtils;

type
  TMyRecord2 = record
    FeldB: Integer;
    class function Init(AFieldB: Integer): TMyRecord2; static;
  end;

  TMyRecord = record
    FeldB: Integer;
    constructor Create(AFieldB: Integer);
  end;

  { TMyRecord }

constructor TMyRecord.Create(AFieldB: Integer);
begin
  FeldB := AFieldB;
end;

{ TMyRecord2 }

class function TMyRecord2.Init(AFieldB: Integer): TMyRecord2;
begin
  Result.FeldB := AFieldB;
end;

var
  MyRecord: TMyRecord;
  MyRecord2: TMyRecord2;

begin
  MyRecord := TMyRecord.Create(123);
  MyRecord2 := TMyRecord2.Init(123);
end.

Ergibt für die beiden Zuweisungen folgenden Assembler-Code:

Code:
Project5.dpr.41: MyRecord := TMyRecord.Create(123);
0041C554 8D45EC          lea eax,[ebp-$14]
0041C557 BA7B000000       mov edx,$0000007b
0041C55C E873D7FFFF      call TMyRecord.Create
0041C561 8B45EC          mov eax,[ebp-$14]
0041C564 A3B8484200       mov [$004248b8],eax
Project5.dpr.42: MyRecord2 := TMyRecord2.Init(123);
0041C569 B87B000000       mov eax,$0000007b
0041C56E E87DD7FFFF      call TMyRecord2.Init
0041C573 A3BC484200       mov [$004248bc],eax
Code:
Project5.dpr.25: begin
00419CD4 55               push ebp
00419CD5 8BEC            mov ebp,esp
00419CD7 83C4F8           add esp,-$08
00419CDA 8955F8           mov [ebp-$08],edx
00419CDD 8945FC          mov [ebp-$04],eax
Project5.dpr.26: FeldB := AFieldB;      // Zuweisung im Create
00419CE0 8B45FC          mov eax,[ebp-$04]
00419CE3 8B55F8           mov edx,[ebp-$08]
00419CE6 8910             mov [eax],edx
Project5.dpr.27: end;
00419CE8 8B45FC          mov eax,[ebp-$04]
00419CEB 59               pop ecx
00419CEC 59               pop ecx
00419CED 5D              pop ebp
00419CEE C3               ret
00419CEF 90               nop
Project5.dpr.32: begin
00419CF0 55               push ebp
00419CF1 8BEC            mov ebp,esp
00419CF3 83C4F8           add esp,-$08
00419CF6 8945FC          mov [ebp-$04],eax
Project5.dpr.33: Result.FeldB := AFieldB;     // Zuweisung im Init
00419CF9 8B45FC          mov eax,[ebp-$04]
00419CFC 8945F8           mov [ebp-$08],eax
Project5.dpr.34: end;
00419CFF 8B45F8           mov eax,[ebp-$08]
00419D02 59               pop ecx
00419D03 59               pop ecx
00419D04 5D              pop ebp
00419D05 C3               ret
00419D06 8BC0             mov eax,eax
  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 13:06 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