Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: [Aktuellere Delphis] Records = Klassen?

  Alt 31. Aug 2011, 18:31
Das mit dem Create-an-Pointer geht leider nicht.

Delphi-Quellcode:
type
  TTest = record
    constructor Create; // *1
    constructor Create(X: integer = 0); // *2
  end;
  PTest = ^TTest;

procedure TForm2.FormCreate(Sender: TObject);
var
  P: PTest;
  T: TTest;
begin
  P := TTest.Create(0); // *3

  T := TTest(0); // *4
  T := TTest.Create(0); // *5
end;
1: [DCC Fehler] Unit3.pas(30): E2394 Parameterlose Konstruktoren sind für Record-Typen nicht zulässig
Warum eigentlich nicht?
Einen plusieblen Grund konnte man mir noch nicht nennen.

2: [DCC Fehler] Unit3.pas(30): E2471 Möglicherweise parameterlose Konstruktoren sind in Record-Typen nicht zulässig
(ich dachte ja, man kann den austriksen )

3: [DCC Fehler] Unit1.pas(42): E2010 Inkompatible Typen: 'PTest' und 'TTest'

4: [DCC Fehler] Unit1.pas(35): E2089 Ungültige Typumwandlung
Schade, denn eigentlich sah es sehr schön aus

5: geht, so kann man sich den Record über einen Constructor vorbefüllen lassen


Im Prinzip ist "entsprichter" Constructor nur
Delphi-Quellcode:
type
  TTest = record
    class function Create(X: integer): TTest;
  end;
Was IMHO hier verständlicher wäre, als soeine "Constructor".
Die Klassenfunction kann man übrigens auch parameterlos nutzten und sie wird genauso verwendet die dieser Pseudoconstructor.
$2B or not $2B
  Mit Zitat antworten Zitat