Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Variable.Create; (https://www.delphipraxis.net/179403-variable-create%3B.html)

Furtbichler 10. Mär 2014 08:55

AW: Variable.Create;
 
Blöd, wenn man eine Initialisierungsmethode nach einem Konstruktor benennt.

himitsu 10. Mär 2014 09:07

AW: Variable.Create;
 
Delphi-Quellcode:
  TRegEx = record // <<<<<<<<<<<<<<<<<
  private
    ...
  public
    constructor Create(const Pattern: string); overload;
    constructor Create(const Pattern: string; Options: TRegExOptions); overload;
tja.



Und ja, in Delphi könnte man diesen Contructor auch Init nennen.

Wobei hier auch TRegEx.Create funktionieren würde.

Furtbichler 10. Mär 2014 10:02

AW: Variable.Create;
 
Ist das denn bei Records überhaupt ein Konstruktor? Ich meine nein, denn da wird nichts konstruiert.

BUG 10. Mär 2014 10:29

AW: Variable.Create;
 
Zitat:

Zitat von Furtbichler (Beitrag 1251352)
Ich meine nein, denn da wird nichts konstruiert.

Klar, es wird eine gültige Record-Instanz konstruiert.
Vergleiche Record einfach mit Klassen in C++: Es ist egal, ob das Objekt auf dem Heap oder auf dem Stack liegt, es wird mit einem Konstruktor erstellt und mit einem Destruktor zerstört.

mkinzler 10. Mär 2014 10:30

AW: Variable.Create;
 
Bei neuen Delphiversionen ist ein Record mehr als ein Record. Es handlet sich um die Ablösung des alten OBJECTes

http://docwiki.embarcadero.com/RADSt....28advanced.29

Furtbichler 10. Mär 2014 10:48

AW: Variable.Create;
 
Zitat:

Zitat von BUG (Beitrag 1251354)
Zitat:

Zitat von Furtbichler (Beitrag 1251352)
Ich meine nein, denn da wird nichts konstruiert.

Klar, es wird eine gültige Record-Instanz konstruiert.
Vergleiche Record einfach mit Klassen in C++: Es ist egal, ob das Objekt auf dem Heap oder auf dem Stack liegt, es wird mit einem Konstruktor erstellt und mit einem Destruktor zerstört.

Ach, echt?
Delphi-Quellcode:
Var
  myRecord : TMyRecord;

Begin
  myRecord.FooBar := 23;
Geht dann nicht mehr? Das geht doch seit Pascal 0.1a so... würde mich doch sehr stark wundern, wenn 99.999% der legacy Delphi-Software dann nicht mehr funktioniert.

So wie ich den Link im DocWiki verstehe, ist ein Record weiterhin ein Record und lebt auch ohne Aufruf des Konstruktors sofort. Das bedeutet: Wenn ich den Konstruktor nicht aufrufen muss, dann kann er ja nicht viel konstruieren, denn ob ich den nun aufrufe oder nicht, ändert am Record nichts, außer eben, das irgend etwas initialisiert wird. Ergo ist das ein Initialisator (was ein dämliches Wort ist), in jedem Fall eine simple Methode.

Was auch sein könnte: Wenn ich einen Recordkonstruktor definiere, dann *muss* ich den auch verwenden, das wird aber aus dem kleinen Absatz nicht ersichtlich...

BUG 10. Mär 2014 11:06

AW: Variable.Create;
 
Zitat:

Zitat von Furtbichler (Beitrag 1251357)
Geht dann nicht mehr? Das geht doch seit Pascal 0.1a so... würde mich doch sehr stark wundern, wenn 99.999% der legacy Delphi-Software dann nicht mehr funktioniert.

Hinter dem Link steht es doch:
Zitat:

Records are constructed automatically, using a default no-argument constructor, but classes must be explicitly constructed. Because records have a default no-argument constructor, ...
Also gibt es einen implizieten Aufruf eines Default-Constructors, welcher nichts macht (und vermutlich auch keinen Code produziert).
Ich gebe zu, dass das Ganze etwas angeflanscht wirkt :mrgreen:

Sir Rufo 10. Mär 2014 11:16

AW: Variable.Create;
 
Zitat:

Zitat von BUG (Beitrag 1251359)
Zitat:

Zitat von Furtbichler (Beitrag 1251357)
Geht dann nicht mehr? Das geht doch seit Pascal 0.1a so... würde mich doch sehr stark wundern, wenn 99.999% der legacy Delphi-Software dann nicht mehr funktioniert.

Hinter dem Link steht es doch:
Zitat:

Records are constructed automatically, using a default no-argument constructor, but classes must be explicitly constructed. Because records have a default no-argument constructor, ...
Also gibt es einen implizieten Aufruf eines Default-Constructors, welcher nichts macht (und vermutlich auch keinen Code produziert).
Ich gebe zu, dass das Ganze etwas angeflanscht wirkt :mrgreen:

Natürlich macht der Default-Record-Constructor etwas => der reserviert den Speicherbereich.

BUG 10. Mär 2014 11:28

AW: Variable.Create;
 
Zitat:

Zitat von Sir Rufo (Beitrag 1251361)
Natürlich macht der Default-Record-Constructor etwas => der reserviert den Speicherbereich.

Mhm, so kann man das auch sehen.

Wirkt trotzdem ziemlich krude.

Furtbichler 10. Mär 2014 12:53

AW: Variable.Create;
 
Zitat:

Zitat von Sir Rufo (Beitrag 1251361)
Natürlich macht der Default-Record-Constructor etwas => der reserviert den Speicherbereich.

Ruft der eigene Konstruktor dann den default constructor auf?

Muss ich also den eigenen Konstruktor aufrufen oder nicht?
Wenn ja => Konstruktor hat seinen Namen verdient.
Wenn nein => Ist das kein Konstruktor.
Delphi-Quellcode:
Type
  TMyRecord = Record
    bar : Integer;
     Constructor Foo(Bar : Integer);
  End;

Constructor TMyRecord.Foo(Bar : Integer);
Begin
  Self.bar := Bar;
End;

Var
  x,y : TMyRecord;

Begin
  y.Foo(27);  // Muss man das so machen?
  x.bar := 27; // Oder geht es auch so? Knallt es hier?
Könnte das mal jemand testen? Danke....


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:50 Uhr.
Seite 4 von 5   « Erste     234 5      

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