Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Interfaces, Factory- und Singletonpattern (https://www.delphipraxis.net/196254-interfaces-factory-und-singletonpattern.html)

Schokohase 5. Mai 2018 08:31

AW: Interfaces, Factory- und Singletonpattern
 
Zitat:

Zitat von Ghostwalker (Beitrag 1401334)
Wenn ich das so mache, erwischt er TObject....nicht gut.

Äh, wenn alle Ableitungen danach keinen Konstruktor deklariert haben, welchen soll er denn sonst nehmen?
Code:
TObject (der hat einen Konstruktor)
- TPersistent (hat KEINEN Konstruktor deklariert)
  - TInterfacedPersistent (hat KEINEN Konstruktor deklariert)
    - TVTDialogBase (hat KEINEN Konstruktor deklariert)
      - TVTColorDialog (hat KEINEN Konstruktor deklariert)

Ghostwalker 5. Mai 2018 15:33

AW: Interfaces, Factory- und Singletonpattern
 
Deshalb hab ich ja geschrieben, das als Teil der Lösung die Basisklasse einen erhält :)

Schokohase 5. Mai 2018 21:33

AW: Interfaces, Factory- und Singletonpattern
 
Zitat:

Zitat von Ghostwalker (Beitrag 1401345)
Deshalb hab ich ja geschrieben, das als Teil der Lösung die Basisklasse einen erhält :)

Dann solltest dich dringend mit den OOP Grundlagen nochmals auseinandersetzen. Dann wirst du merken, das dein Vorgehen unsinnig ist.

Ghostwalker 6. Mai 2018 04:40

AW: Interfaces, Factory- und Singletonpattern
 
Warum ?

Da div. abgeleitete Klassen von Haus auf einen eigenen Konstruktur haben, habe ich das in der Basisklasse als virtuellen Konstruktor gleich vorgesehen. Wo liegt hier ein "verstoß" gegen die OOP vor ?

Das ganze funktioniert genau so, wie das beabsichtigt ist.

Basilikum 6. Mai 2018 06:04

AW: Interfaces, Factory- und Singletonpattern
 
Weshalb der Umweg über RTTI ?
Da die Basis-Klasse ja nun einen virtual Constructor enthält, geht es auch direkt via Class-Type:
Code:
Type
  TVTDialogBase = Class(TInterfacedPersistent,IVTDialogCall)
    private
    protected
    public
Constructor VirtualConstructor(); Virtual;
    published
  End;
  TVTDialogBaseClass = Class Of TVTDialogBase;

  TDialogItem = ...
    AClass : TVTDialogBaseClass;
    AInst : TVTDialogBase;
  end;

// [..]

var
  dm : TDialogItem;
Begin
  dm.AInst := dm.AClass.VirtualConstructor();
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz