Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi unterschiedliche Klassen variabel instanzieren (https://www.delphipraxis.net/161797-unterschiedliche-klassen-variabel-instanzieren.html)

haentschman 21. Jul 2011 08:30

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:

Deep-Sea 21. Jul 2011 08:35

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?

himitsu 21. Jul 2011 09:03

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;

_Sebastian_ 21. Jul 2011 09:20

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:
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.
gruß
Sebastian

haentschman 21. Jul 2011 11:02

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:

Memnarch 21. Jul 2011 11:06

AW: unterschiedliche Klassen variabel instanzieren
 
öhm, wasn das für ne MemoryLeakMaschine?

Code:
procedure TForm1.Button2Click(Sender: TObject);
begin
  TAction.Create(TSpecial2);
end;

_Sebastian_ 21. Jul 2011 11:22

AW: unterschiedliche Klassen variabel instanzieren
 
Zitat:

Zitat von Memnarch (Beitrag 1112861)
öhm, wasn das für ne MemoryLeakMaschine?

Ups.. :roll:
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;

himitsu 21. Jul 2011 12:08

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;

Deep-Sea 21. Jul 2011 12:27

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:
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;
:stupid:

FredlFesl 21. Jul 2011 16:53

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 00:13 Uhr.
Seite 1 von 2  1 2      

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