![]() |
Objekt erzeugen - aber welche Klasse - und wie zugreifen?
Guten Tag zusammen,
ich habe folgendes Problem, und hoffe, Ihr könnt mir dabei behilflich sein. Ich habe zwei Klassen geschrieben, TSuzuki und TKawasaki. Ich möchte nun in meinem Programm, je nachdem was der User auswählt, ein Objekt aus dieser Klasse erzeugen; und hier hört es auch schon auf mit dem Wissen um OOP, bzw. fangen die Probleme an. Ich habe zwar schon einige Tutorials diesbezüglich gelesen, allerdings haben die sich alle mit einfachen Beispielen befasst, in dem eine Klasse geschrieben, und daraus dann ein Objekt erzeugt wurde. Nun also zum Problem. Normalerweise erzeuge ich ein Objekt dadurch, dass ich eine Variable erstelle, dieser einen Typ zuweise, und dann z.B. sage
Delphi-Quellcode:
Nun ist es in meinem aktuellen Beispiel aber so, dass ich noch nicht weiss, was für ein Typ das sein wird, es kann also TSuzuki oder TKawasaki sein.
var
MeineVariable: TMeinTyp; begin MeineVariable := TMeinTyp.Create; end; Muss ich dem Fall zwei Variablen anlegen, und je nachdem welcher Typ benötigt wird, eine von den beiden erzeugen, also so:
Delphi-Quellcode:
Das wäre ja ziemlich umständlich, gerade wenn es dann mehrere Klassen sind.
var
MeineSuzuki: TSuzuki; MeineKawasaki: TKawasaki; begin if Maschine = 'Suzuki' then begin MeineSuzuki := TSuzuki.Create; end else if Maschine = 'Kawasaki' then begin MeineKawasaki := TKawasaki.Create; end; end; Und meine zweite Frage: Ich möchte natürlich mehrere dieser Objekte erzeugen. Wie kann ich dann später auf diese Objekte zugreifen? Ich meine, die heissen dann ja alle MeineSuzuki oder MeineKawasaki - geht das überhaupt, oder kann ich da irgendwie zur Laufzeit Variablen anlegen? Verzeiht bitte, dass ich so ein für Euch sicherlich triviales Problem habe, aber ich beginne gerade erst mit der OOP und bin diesbezüglich nirgends fündig geworden - danke. |
Re: Objekt erzeugen - aber welche Klasse - und wie zugreifen
Ein Vorschlag: Erstell eine Klasse TMotorrad, von der die andern beiden abgeleitet werden:
Klassendeklarationen:
Delphi-Quellcode:
Verwendung:
type
TMotorrad = class(TObject) // Eigenschaften und Methoden, die beide Klassen gemeinsam haben sollen end; TSuzuki = class(TMotorrad) // hier alles suzukispezifisches end; TKawasaki = class(TMotorrad) // und hier kawasakispezifisches end;
Delphi-Quellcode:
Unterscheiden, welche Marke es ist, kannst Du später so:
var
MeinMotorrad: TMotorrad; begin if Maschine = 'Suzuki' then begin MeinMotorrad := TSuzuki.Create; end else if Maschine = 'Kawasaki' then begin MeinMotorrad := TKawasaki.Create; end; end;
Delphi-Quellcode:
MfG
if MeinMotorrad.ClassType = TSuzuki then
// ... // oder für Kawasaki: if MeinMotorrad.ClassType = TKawasaki then // ... |
Re: Objekt erzeugen - aber welche Klasse - und wie zugreifen
Zitat:
|
Re: Objekt erzeugen - aber welche Klasse - und wie zugreifen
Hallo,
das sieht ja schonmal gut aus - vielen Dank :) Und das funktioniert auch, wenn ich diese Funktion aufrufe, dass ich dann beliebig viele 'MeinMotorrad' mal als Suzuki und mal als Kawasaki habe? Ich meine, wenn ich dann folgendes habe: MeinMotorrad (Kawasaki) MeinMotorrad (Kawasaki) MeinMotorrad (Suzuki) MeinMotorrad (Kawasaki) MeinMotorrad (Suzuki) MeinMotorrad (Suzuki) <---- wie bekomme ich diese Suzuki? MeinMotorrad (Kawasaki) MeinMotorrad (Kawasaki) MeinMotorrad (Suzuki) MeinMotorrad (Suzuki) MeinMotorrad (Kawasaki) Wie kann ich dann eine von diesen direkt ansprechen? Ich meine, jedes Objekt hat ein Feld ID, welches eindeutig ist. Aber wie kann ich nun ein bestimmtes Objekt über seine ID ansprechen? Per SQL würde ich einfach SELECT * FROM ... WHERE ID=XXX schreiben, was hier aber wohl nicht funktioniert :? Edit: OK, ich schaue mir mal TObjectList an - danke ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 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