Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   KlassenTyp und nicht Instanz übergeben (https://www.delphipraxis.net/173204-klassentyp-und-nicht-instanz-uebergeben.html)

Jonas Shinaniganz 12. Feb 2013 16:42

KlassenTyp und nicht Instanz übergeben
 
Hallo liebe DP'ler,

ich überlege grade, wie ich meine Idee am besten umsetze. Vereinfacht:

Delphi-Quellcode:
type
  // Basisklasse
  TConfigFailCode = class
    class function CodeMessage : String; dynamic; abstract;
  end;

  // hiervon gibt es einige andere Fehlermeldungs Klassen
  TCFCMailbox = class(TConfigFailCode)
    class function CodeMessage : String; override;
  end;

                                      //  TCFC = TConfigFailCode; (Synonym)
procedure TForm1.ConfigFailOutput(Code : TCFC);
begin
  Showmessage(Code.CodeMessage);
end;

// Hier rufe ich auf:
begin
  if A < B then
    ConfigFailOutput(TCFCMailbox);
end;
Mein Problem ist ja, das in der Prozedur ConfigFailOutput eine Instanz von TCFC erwartet wird und nicht einfach die Klasse. Ich brauche allerdings an der Stelle keine Objekte, da nur eine classfunction aufgerufen wird, was kann ich machen?

DeddyH 12. Feb 2013 16:59

AW: KlassenTyp und nicht Instanz übergeben
 
Ungetestet:
Delphi-Quellcode:
type
  TConfigFailCodeClass = class of TConfigFailCode;

procedure TForm1.ConfigFailOutput(Code : TConfigFailCodeClass);
begin
  Showmessage(Code.CodeMessage);
end;

Jonas Shinaniganz 12. Feb 2013 17:03

AW: KlassenTyp und nicht Instanz übergeben
 
Ah super, genau das "class of" habe ich gesucht. Tolle Sache, damit kann man doch bestimmt auch prima eine Abstrakte Fabrik umsetzen.

Klappt alles prima, Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 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