![]() |
unterschiedliche Klassen variabel instanzieren
Guten Morgen... :hi:
es ist wahrscheinlich einfacher als gedacht aber ich quäle mich schon seit gestern durch die DP Suche ohne wirklich die Frage beantwortet zu bekommen. Ziel: - Klasse Test wird erzeugt mit Übergabeparameter - Klasse Test erzeugt Klasse entsprechend dem Übergabeparameter als Property Beispiel: bei 1 --- Klasse Test1 bei 2 --- Klasse Test2 . . . den Übergabeparameter wollte ich über eine Case Struktur auswerten und entsprechend erzeugen. Da müßte die Varable ja erst in im case deklariert werden... was ja nicht geht. Ob Klasse Test1 von Test abgeleitet ist oder eigenständig ist mir relativ egal. Bitte helft mir in die Richtung... Danke :hi: |
AW: unterschiedliche Klassen variabel instanzieren
Ich seh jetzt gerade das Problem nicht, sry :cyclops:
Und warum müsste eine Variable erst im Case deklariert werden? |
AW: unterschiedliche Klassen variabel instanzieren
Das warum ist mir auch noch etas unklar,
aber es stimmt. Ob wohl ein Objekt eigentlich auch "nur" ein Record mit Zeiger ist, funktioniert Case dort nicht, allerdings
Delphi-Quellcode:
TImageListLoader = class
data: record case boolean of false: (); true: (); end; end; |
AW: unterschiedliche Klassen variabel instanzieren
Moin. Ich weiß nicht es was für dich ist aber ich habe mir mal ein Konstrukt gebaut wo ich dynamisch, variabel gewählte Klasse, erzeugt habe.
Ich habe das so gelöst. (etwas einfacher hier) Die Klasse TAction bekommt eine Klassenreferenz übergeben und erzeugt sich daraus ein Objekt.
Delphi-Quellcode:
gruß
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TBase = class(TObject) public procedure Action; virtual; abstract; end; TSpecial1 = class(TBase) public procedure Action; override; end; TSpecial2 = class(TBase) public procedure Action; override; end; TBaseClass = class of TBase; TAction = class(TObject) public constructor Create(aClass: TBaseClass); end; TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TSpecial1.Action; begin showmessage('Action 1'); end; procedure TSpecial2.Action; begin showmessage('Action 2'); end; constructor TAction.Create(aClass: TBaseClass); var c : TBase; begin c := aClass.Create; c.Action; c.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin TAction.Create(TSpecial1); end; procedure TForm1.Button2Click(Sender: TObject); begin TAction.Create(TSpecial2); end; end. Sebastian |
AW: unterschiedliche Klassen variabel instanzieren
Danke für Eure Antworten...
ich kann mich im Moment leider nicht damit beschäftigen und näher darauf eingehen... Es gibt Dinge die (leider) wichtiger sind. Ich melde mich wenn ich die Zeit gefunden habe. :hi: |
AW: unterschiedliche Klassen variabel instanzieren
öhm, wasn das für ne MemoryLeakMaschine?
Code:
procedure TForm1.Button2Click(Sender: TObject);
begin TAction.Create(TSpecial2); end; |
AW: unterschiedliche Klassen variabel instanzieren
Zitat:
Denke dem geneigten Entwickler wäre es aufgefallen bzw. nutzt den code eh etwas umfangreicher. ..
Code:
procedure TForm1.Button2Click(Sender: TObject);
var a:TAction; begin a := TAction.Create(TSpecial2); a.free; end; |
AW: unterschiedliche Klassen variabel instanzieren
Man könnte die Klassen auch von TComponent ableiten und die Form als Owner mitgeben ... dann räumt die Form auf.
Oder :oops:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin TAction.Create(TSpecial2).Free; end; |
AW: unterschiedliche Klassen variabel instanzieren
Und wenn wir schon wieder so kleinlich sind, dann fehlt im Konstruktor von TAction ein Try-finally-Block:
Delphi-Quellcode:
:stupid:
constructor TAction.Create(aClass: TBaseClass);
var c : TBase; begin c := aClass.Create; try c.Action; // Könnte ja eine Exception auswerfen ... finally c.Free; end; end; |
AW: unterschiedliche Klassen variabel instanzieren
Hmmm... Die Eingangsfrage beschäftigt sich mit einer Classfactory, wenn ich nicht irre.
Und nun wird klein-klein über unwichtige Dinge philosophiert. So ein Resourcenschutzblock ist ja ganz nett, aber im allgemeinen überflüssig wie ein Kropf. Ausnahmen sind knappe Resourcen (z.B. von Windows), die in einer unteren Schicht angefordert und auch im Fehlerfall wieder freigegeben werden müssen. Dann kümmert sich jedoch (z.B.) ein Securitymanager um die Exception. Bei einem Buttonklick kann man natürlich auch einen Resourcenschutzblock anwenden, aber wozu? Wenn's knallt, kann ich sowieso noch nicht ausliefern... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr. |
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