Was, außer der Startzuweisung sollte in der Init erfolgen?
(Endlich fange ich mal mit Klassen an

Code: Alles auswählen
inherited Create;
Meinst du "object" oder "class"?MacWomble hat geschrieben:Ist das Init für Klassen 'Pflicht' oder 'Guter Stil', oder genügt es wenn man die Propertis mit Defaults bestückt, wo notwendig?
Was, außer der Startzuweisung sollte in der Init erfolgen?
(Endlich fange ich mal mit Klassen an)
Das geht schief, wenn "class" gemeint ist. Klassen (also z.B. type TMyClass = class) werden auf dem Heap angelegt, und die Speicherreservierung erfolgt im Konstructor. Kein Aufruf von Create -> keine Speicher -> crash.m.fuchs hat geschrieben:Init? Du meinst den Konstruktor? Der wird im Allgemeinen als Create benannt.
Wenn du keine Initialisierung vornehmen musst, dann kannst du ihn dir sparen. Das ist völlig legitim und auch kein schlechter Stil.
Code: Alles auswählen
type
TMyObject = class
A: Integer;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
obj: TMyObject;
begin
obj.A := 1; // <--- crash here!
end;
Es ging aber nicht um den Aufruf von Create, sondern ob in einer abgeleiteten Klasse eine implementiert werden muss. Und das muss eben nicht sein.wp_xyz hat geschrieben:Das geht schief, wenn "class" gemeint ist. Klassen (also z.B. type TMyClass = class) werden auf dem Heap angelegt, und die Speicherreservierung erfolgt im Konstructor. Kein Aufruf von Create -> keine Speicher -> crash.m.fuchs hat geschrieben:Init? Du meinst den Konstruktor? Der wird im Allgemeinen als Create benannt.
Wenn du keine Initialisierung vornehmen musst, dann kannst du ihn dir sparen. Das ist völlig legitim und auch kein schlechter Stil.
So explizit steht das nirgendwo. Die Formulierungen hier im Forum sind meistens so, dass sie mindestens zwei Interpretationen zulassen.m.fuchs hat geschrieben: Es ging aber nicht um den Aufruf von Create, sondern ob in einer abgeleiteten Klasse eine implementiert werden muss.
Code: Alles auswählen
TMyClass = class
private
FId: Integer;
public
property Id: Integer read FId write FId;
Code: Alles auswählen
type
TQuery = class
private
FVersion: AnsiString;
...
protected
function IsVersionSupported: Boolean; virtual; // In dieser Methode wird evaluiert ob FVersion noch unterstützt wird
...
public
property Version: AnsiString read FVersion write FVersion; // Die Version wird direkt in die Variable FVersion geschrieben bzw daraus gelesen
property VersionSupported: Boolean read IsVersionSupported; // Das ist eine Read-Only Eigenschaft die mir sagt ob die Version des Clients unterstützt wird
...
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);