Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Methodenaufruf einer bestimmten Klasse erzwingen (https://www.delphipraxis.net/156109-methodenaufruf-einer-bestimmten-klasse-erzwingen.html)

Ralf Meyer 20. Nov 2010 10:02

Methodenaufruf einer bestimmten Klasse erzwingen
 
Die Methode meiner realen Klasse wird nicht aufgerufen, wie bekomme ich das hin.

Mein Code:

Delphi-Quellcode:
Type
  tMyList = class( tList )
    Procedure Add( Const cClass : tMyBaseClass ) ;
  End ;

  tMyclassDef = class of tMyBaseClass ;
  tMyBaseClass = class
    classTyp : tmyClassDef ;
    Procedure Clone ; Virtual ;
  End ;

  tMySpezielleKlasse = class ( myBaseClass )
    Procedure Clone ; Override ;
  End ;

  ...

    abc := tMySpezielleKlasse.create ;
    abc.ClassType := tMySpezielleKlasse ;

    List := tMytMyList.create ;
    List.Add ( abc ) ;

    // jetzt kommt das Problem
    ab_neu := tMyBaseClass( List[0] ).Clone ; // ruft das Clone von tMyBaseClass auf

    lClassType := tMyBaseClass( List[0] ).ClassType ;
    ab_neu := ( List[0] as lClassType ).Clone ; // ruft auch das Clone von tMyBaseClass auf

    // da wichtige Objekte Instanziert werden müssen, muss das Clone meiner speziellen
    // Klasse aufgerufen werden
  ...
Ich müsste irgendwie den Aufruf der abgeleiteten Klasse erzwingen - aber wie?

Weiß jemand einen Rat. Gruß

Klaus01 20. Nov 2010 10:07

AW: Methodenaufruf einer bestimmten Klasse erzwingen
 
Guten Morgen,

besteht das Problem immer noch wenn Du die Methode abstract definierst?

Delphi-Quellcode:
  tMyclassDef = class of tMyBaseClass ;
  tMyBaseClass = class
    classTyp : tmyClassDef ;
    Procedure Clone ; Abstract; Virtual ;
  End ;
Grüße
Klaus

Bummi 20. Nov 2010 10:11

AW: Methodenaufruf einer bestimmten Klasse erzwingen
 
in TMyClassDef Clone auf Virtual ;abstract; setzen

himitsu 20. Nov 2010 10:34

AW: Methodenaufruf einer bestimmten Klasse erzwingen
 
Abstract besagt nur, daß man in tMyBaseClass für Clone keinen Code hinterlegen will.
Das hat aber garnichts mit dem Aufruf zu tun.

Delphi-Quellcode:
abc.ClassType := tMySpezielleKlasse ;
sollte in Delphi doch eigentlich nicht funktionieren. :shock:
Und wozu soll dieses gut sein?

Ansonsten sollte dein Code eigentlich funktionieren.
Kannst du mal bitte ein komplettes Beispielprojekt hochladen?

Welche Delphi-Version nutzt du denn?


Warum nutzt du TList und nicht TObjectList, für die Verwaltung deiner Objekte, bzw. als Vorfahre von tMyList?
Und was macht dein Add intern?

Ralf Meyer 20. Nov 2010 12:43

AW: Methodenaufruf einer bestimmten Klasse erzwingen
 
Was für einfache Sachen man manchmal übersehen kann ...

Delphi-Quellcode:
  tMyclassDef = class of tMyBaseClass ;
 ...

  tMySpezielleKlasse = class ( myBaseClass )
    Procedure Clone ; Virtual; // <= Fehler Virtual anstatt Override
  End ;
Ich habe die Methode Clone in der abgeleiteten Klasse als Virtual und nicht als Override deklariert. Dann kann es auch nicht funktionieren.

Danke für eure Hilfe.

Bummi 20. Nov 2010 15:43

AW: Methodenaufruf einer bestimmten Klasse erzwingen
 
Dein erstes Post sagt etwas anders.:-D

himitsu 20. Nov 2010 16:48

AW: Methodenaufruf einer bestimmten Klasse erzwingen
 
Das kommt davon, wenn man nicht das postet, womit man Probleme hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.

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