AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi unterschiedliche Klassen variabel instanzieren
Thema durchsuchen
Ansicht
Themen-Optionen

unterschiedliche Klassen variabel instanzieren

Ein Thema von haentschman · begonnen am 21. Jul 2011 · letzter Beitrag vom 22. Jul 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#1

unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 08:30
Guten Morgen...

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
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#2

AW: unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 08:35
Ich seh jetzt gerade das Problem nicht, sry
Und warum müsste eine Variable erst im Case deklariert werden?
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.145 Beiträge
 
Delphi 12 Athens
 
#3

AW: unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 09:03
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
_Sebastian_

Registriert seit: 22. Jul 2004
Ort: Lübeck
72 Beiträge
 
Delphi 2010 Professional
 
#4

AW: unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 09:20
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
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#5

AW: unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 11:02
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.

  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#6

AW: unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 11:06
öhm, wasn das für ne MemoryLeakMaschine?

Code:
procedure TForm1.Button2Click(Sender: TObject);
begin
  TAction.Create(TSpecial2);
end;
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
_Sebastian_

Registriert seit: 22. Jul 2004
Ort: Lübeck
72 Beiträge
 
Delphi 2010 Professional
 
#7

AW: unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 11:22
öhm, wasn das für ne MemoryLeakMaschine?
Ups..
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.145 Beiträge
 
Delphi 12 Athens
 
#8

AW: unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 12:08
Man könnte die Klassen auch von TComponent ableiten und die Form als Owner mitgeben ... dann räumt die Form auf.


Oder
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  TAction.Create(TSpecial2).Free;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#9

AW: unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 12:27
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;
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#10

AW: unterschiedliche Klassen variabel instanzieren

  Alt 21. Jul 2011, 16:53
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...
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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