AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Klasse nach Vergleich mit Feld in Klasse erzeugen

Klasse nach Vergleich mit Feld in Klasse erzeugen

Ein Thema von ChEeTaH · begonnen am 26. Mär 2012 · letzter Beitrag vom 26. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2   
ChEeTaH

Registriert seit: 12. Jan 2009
49 Beiträge
 
Delphi XE2 Architect
 
#1

Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 14:54
Delphi-Version: XE2
Hallo,

ich habe mehrere Klassen, die von einer abstrakten Klasse geerbt haben.
Ich muss nun je nach Eingabewert unterscheiden, welche dieser Childklassen erzeugt werden und mit dem Ergebnis arbeiten. Ob diese Klasse das Ergebnis verarbeiten kann steht in der Klasse als Eigenschaft.
Ich habe hier versucht, zumindest teiwleise das Strategie Pattern umzusetzen.
Codebeispiel:
Delphi-Quellcode:
type TParentClass = class
  {iwas}
end;

type TChildclass(TParentclass)
  eineZahl: Integer;
  procedure eineMethode(asd: String);
end;

procedure choose;
var
 EineChildclass: TChildclass;
begin
  If eineChildclass.eineZahl = 1 then
  begin
  EineChildclass := TChildclass.Create;
  EineChildclass.eineMethode('test';
  
  // WIe frage ich ab, welche Klasse erzeugt werden muss?
  end;
end;
Ich habe etwas von Methodenklassen gelesen, wäre dies der WEg zu Ziel, oder gibt es andere Lösungen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 15:12
Ich weiß nicht, ob es nur mir so geht, aber ich verstehe weder die Frage noch Deinen Code so richtig. Wie kannst Du ein Feld einer Instanz abfragen, die Du im Anschluss erst erzeugst?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
ChEeTaH

Registriert seit: 12. Jan 2009
49 Beiträge
 
Delphi XE2 Architect
 
#3

AW: Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 15:48
Das genau ist ja der Knackpunkt. Ich möchte die Eigenschaft gerne in der Klasse kapseln, muss aber auch wissen, welche klasse ich nun genau benutzen muss. Der vergleiswert ist variabel, deswegen dieser umständliche weg.

Geändert von ChEeTaH (26. Mär 2012 um 15:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 16:17
Suchst Du eine Class Function eineZahl ??
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 16:26
RTTI? Ich verstehe immer noch nicht ganz, was eigentlich die Anforderung ist, sry.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 16:39
ich vermute er such so etwas
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,jpeg, StdCtrls, ExtCtrls;

type

  TMasterClass=Class
    Class Function WasKannich:Integer;virtual;
  End;

  TMasterChildClass1=Class(TMasterClass)
    Class Function WasKannich:Integer;override;
  End;
  TMasterChildClass2=Class(TMasterClass)
    Class Function WasKannich:Integer;override;
  End;
  TMasterClassClass=Class of TMasterClass ;

  TForm2 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  CK:TMasterClassClass;
begin

    if TMasterChildClass1.WasKannich=2 then CK := TMasterChildClass1
    else if TMasterChildClass2.WasKannich=2 then CK := TMasterChildClass2;
    With CK.Create do
      begin
        Showmessage(IntToStr(WasKannich));
        Free;
      end;

end;

{ TMasterChildClass2 }

class function TMasterChildClass2.WasKannich: Integer;
begin
  Result := 2;
end;

{ TMasterChildClass1 }

class function TMasterChildClass1.WasKannich: Integer;
begin
  Result := 1;
end;

{ TMasterClass }

class function TMasterClass.WasKannich: Integer;
begin
   Result := 0;
end;

end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

AW: Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 16:43
1.) die Basisklasse hat eine statische Methoden (in Delphi Klassenmethode genannt)
mit der man Abfragen kann ob eine Klasse bestimmte Eigenschaften hat bzw. über bestimmte Features verfügt.

2.) die Klassenmethode sollte virtuell sein; das bietet noch mehr Möglichkeiten
Delphi-Quellcode:
type
TParentClass = class
public
  class function HasFeature(const name:string):boolean;virtual;
end;

TChildclass = class(TParentclass)
  class function HasFeature(const name:string):boolean;override;
end;

class function TChildclass.HasFeature(const name:string):boolean;
begin
   // die konkrete Klasse unterstützt die Features Secure und Hip
   result := (name='Secure') or (name='hip');
end;
3.) eine Factorymethode erzeugt aufgrund der gewünschten Features ein Objekt einer konkreten (Child-)Klasse:

Delphi-Quellcode:
function TMyFactory.CreateObject(const feature:string):TParentClass;
begin
  if TChildclass1.HasFeature(feature) then
    result := TChildclass1.Create
  else if TChildclass2.HasFeature(feature) then
    result := TChildclass2.Create
  ...
  else
     result := nil;
end;
Man kann auch mehrere Features prüfen um die passende Klasse zu finden.
Anstatt jede einzelne Klasse zu testen kann man auch alle registrierten Klassen in einer Schleife testen (aber dazu benötigt man fortgeschrittene Techniken, die ich im Moment nicht erklären möchte)

PS: der Bummi war natürlich mal wieder schneller
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 16:46
@shmia

tschuldigkeit sonst schlägt mich immer DeddyH ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
ChEeTaH

Registriert seit: 12. Jan 2009
49 Beiträge
 
Delphi XE2 Architect
 
#9

AW: Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 16:53
Ja genau das habe ich gesucht. Danke an alle für die schnelle Hilfe

Geändert von ChEeTaH (26. Mär 2012 um 17:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Klasse nach Vergleich mit Feld in Klasse erzeugen

  Alt 26. Mär 2012, 16:54
Mit der neuen erweiterten RTTI kann man auch Attribute anlegen und auslesen, zu den Klassentypen (quasi ähnlich der virtuellen Klassenmethoden).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:37 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