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.