AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Beliebig viele Instanzen von einer abgeleiteten Klasse

Beliebig viele Instanzen von einer abgeleiteten Klasse

Ein Thema von Chewie · begonnen am 20. Okt 2003 · letzter Beitrag vom 20. Okt 2003
Antwort Antwort
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

Beliebig viele Instanzen von einer abgeleiteten Klasse

  Alt 20. Okt 2003, 20:24
Ich habe gerade wieder mal Zeit gefunden, mich an meine typisierte Datei für Baumstrukturen ranzumachen, stoße jetzt aber auf ein kleines Problem, zu dass ich einen Denkanstoß brauchen könnte.

Wie in diesem Thread beschrieben, definiere ich eine abstrakte Klasse für die einzelnen Nodes, eine davon abgeleitete Klasse ersetzt die abstrakten Methoden, die hautpsächlich der Verwaltung dienen, durch reelle. Das klappt super beim Schreiben in Dateien, da ja die Nodes bereits existieren, aber beim Lesen gibts da leider ein Problem: In der Unit mit der Klassendefinition ist ja nur die abstrakte Klasse bekannt, und beim Lesen muss ich ja dynamisch Nodes erzeugen, doch da die abgeleitete Klasse hier nicht bekannt ist (und das auch nicht soll, da die Klasse universell verwendbar sein soll) kann ich ja nur Instanzen der abstrakten Klassen erzeugen, was ich so natürlich nicht will.

Frage: Wie kann ich nun Instanzen der abgeleiteten Klasse erzeugen bzw. wie bekomme ich die Instanzen in die Funktion (ich weiß vorher nicht, wie viel ich brauch, eine vorgefertigte Liste scheidet also aus), ohne die Deklaration der abgeleiteten Klasse dieser Unit bekannt zu machen?

Die einzige Möglichkeit, die mir einfiele, wäre, eine Callback-Prozedur an die Einleseprozedur zu übergeben, welche dann bei Bedarf die Callback-Methode aufrufen würde. Die Callback-Methode würde dabei eine Instanz dieser (abgeleiteten) Klasse erzuegen, die nun verwendet werden könnte.

Hmm, während ich das hier schreibe, merke ich, dass diese Methode mit der Callback-Prozedur gar nicht so schlecht ist, wie ich anfangs dachte. Aber da ich dies nicht umsonst schreiben will, frage ich trotzdem, vielleicht kann mir doch jemand eine bessere Lösung vorschlagen.


P.S. Blöd, dass der Titel nur so kurz sein darf - ich hätte noch ein paar Worte mehr brauchen könnnen
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Beliebig viele Instanzen von einer abgeleiteten Klasse

  Alt 20. Okt 2003, 21:58
Ich würde ja zu 'ner MetaKlasse raten:
Delphi-Quellcode:
type
  TAbstractClass = class of TAbstractObject;

  TAbstractObject = class(TObject)
  protected
    procedure AbstractMethod; virtual; abstract;
  end;

  TConcreteObject = class(TAbstractObject)
  protected
    procedure AbstractMethod; override;
  end;

  TFileReader = class(TObject)
  private
    FItemClass: TAbstractClass;
  public
    property ItemClass: TAbstractClass read FItemClass write FItemClass;
  end;

implementation

procedure TFileReader.ReadFromFile;
begin
  // über die Metaklasse können hier beliebige Klassen erstellt werden
  FItemClass.Create;
end;

var
  aFileReader: TFileReader;
begin
  aFileReader := TFileReader.Create;
  try
    aFileReader.ItemClass := TConcreteObject;
    // notwendige Methoden aufrufen
    aFileReader.ReadFromFile;
  finally
    FreeAndNil(aFileReader)
  end;
end;
CU mr2
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Beliebig viele Instanzen von einer abgeleiteten Klasse

  Alt 20. Okt 2003, 22:24
Hm, ich wusste nicht, dass es sowas gibt.
Leider stoße ich da auf einige Probleme.

Anscheinend kann ich auf keine Properties von Metaklassen zugreifem, und überhaupt habe ich die Verwendung von denen noch nicht ganz geblickt.
Wie auch immer, bevor ich dich jetzt mich Fragen überschütte, geh ich mal lieber in die Heia-Kiste und schau mir das in Ruhe morgen an, vielleicht werd ich mir die Metaklassen dann selbst erschließen können.
Aber danke für den Hinweis!
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
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 11:41 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