Zitat von
Christian18:
Zitat von
jbg:
Mit der "neuen" Lösung musst du jedem im Team erklären, dass er nach dem Create noch deine Erzeugen Methode aufrufen soll. Vergiss einer das, kannst du dir denken was passiert.
Hallo jbg,
du hast geschriben, dann ich bei der zweiten Lösung anderen Programmierern sagen muß das man noch den Create noch die Methode aufrufen muß.
Ist das würklich so??? Ich habe mir einfach mal eine Delphi
Standart Komponente angeschaut. (TOpenDialog) bei der ist es doch auch so wie in meiner zweiten Lösung oder sehe ich das falsch???
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var o : TOpenDialog;
begin
o:=TOpenDialog.Create(self); --> erzeugen
if o.Execute then --> aufruf durch Execut
begin
...
end;
end;
Ist das nicht das gleiche??? Also nochmal welche vorteile hat das ganze denn jetzt für mich wenn ich eine Constructor verwende???
MFG Christian18
PS: Meine Frage zu der Kapselung ist noch offen...
Hi Christian,
bei dem Beispiel wird der OpenDialog aufgerufen nicht erzeugt.
Deine beiden Sourcen machen genau das gleiche, aber:
du hast eine
unit für die Komponente und eine
Unit für dein Programm. Für jedesmal wenn du die Komponente nutzen möchtest (du kannst ja mehrere Instanzen erstellen) müsstest du folgendes Schreiben:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var n : TNavi;
begin
n:=TNavi.Create();
n.Erzeugen(Form1, 'Button');
n.Free;
end;
Auch wenn du nun nur deine Komponente weitergeben möchtest müsste derjenige der sie nutzen möchte auch noch diesen Source selber schreiben. Dies kann man sich nun sparen, wenn man das einmal deklariert hat. Man hat dann nur noch den Einzeiler
n:=TNavi.Create(FMain, 'Button');
Gerade wenn man viele dieser Objekte hat, spart dies Zeit und ist übersichtlicher sowie weniger Fehleranfällig.
Hoffe geholfen zu haben