![]() |
Dynamischer Funktionsaufruf
Hallo
Ich habe einige verschiedene Klassen, welche Listen für andere Klassen darstellen:
Delphi-Quellcode:
Nun speichere ich die verschiendenen TBCEffect- Objekte in einer eigen gebauten HashMap im TBCEffectList.
TBCEffect = class
private eid: Integer; name: String; public getEID: integer; getName: String; //... end; TBCEffectList = class private function getEffectByID(eid: integer): TBCEffect; function getEffectByName(name: String): TBCEffect; //... end; Ich möchte nun über die Liste (TBCEffectList) ein TBCEffect- Objekt finden können. Und zwar nach einer seiner Eigenschaften(eid, name, ...). Dies ist auch kein Problem. Doch muss ich die Prozeduren(getEffectByID, getEffectByName) in jeder Liste implementieren(gibt noch andere ausser TBCEffectList). Mein Vorhaben ist es nun, diese Funktion in eine abstrakte Klasse zu extrahieren. Doch habe ich nun das Problem, dass die Funktionen zum die ID zu holen, in jeder Klasse anders heissen (getEID, getDID, getBID, ...) Kann ich nun von der Kinderklasse TBCEffectList zB. per String angeben, wie die benötigte Funktion heisst und diese, ohne case oder so, direkt aufrufen? (Ich kenne dieses Vorgehen aus Java, dort funktioniert dies) Oder kann man dies irgentwie durch Pointer auf die Funktion lösen? Gruss und Danke Sämy |
Re: Dynamischer Funktionsaufruf
HAI Sämy :hi:
ich hab sowas für Kameras gemacht. in der abstrakten Klasse KAMERA weis ich nicht was die konkrete Kamera kann. Muß aber über die Abstrate Klasse abfragen was kann die konktete Kamera kann... in der Abstrakten Klasse für allgemeine Parameter:
Delphi-Quellcode:
in der Konkreten Klasse TBaumer ist von TKamera abgeleitet:
function TKamera.GetParameter(Param:Integer): string;
begin IF Param = ckam_act_size_x then Result := IntTostr(fact_size_x) Else IF Param = ckam_act_size_y then Result := InttoStr(fact_size_y) Else IF Param = ckam_org_size_x then Result := InttoStr(forg_size_x) Else IF Param = ckam_org_size_y then Result := InttoStr(forg_size_y) ... ; // case geht auch!!! end;
Delphi-Quellcode:
oder versteh ich das Problem Falsch ???
procedure TBaumer_fx.SetParameterInt(Param: integer;
const Value: Integer); begin IF Param = ckam_dym_size_x then Result := IntTostr(fdym_size_x) Else IF Param = ckam_dym_size_y then Result := InttoStr(fdym_size_y) ... Else Result := inherited GetParameterInt(Param); end; |
Re: Dynamischer Funktionsaufruf
Mein Ziel wäre es eben, dass ich in der abstrakten Klasse keine ifs schreiben müsste.
Sondern, dass ich der abstrakten Klasse beibringen könnte, wie er auf die Funktion zugreifen kann(von extern). Dann könnte auch die Situation, dass eine andere Klasse zB. eine Eigenschaft "length" hat, eine weitere jedoch nicht, behandelt werden... (und ich müsste diese nicht in der abstrakten Klasse mit einem if "registrieren") |
Re: Dynamischer Funktionsaufruf
Dann solltest du dich einmal mit der Delphi-RTTI/Unit TypInfo anfreunden, wobei auch Einiges dazu hier im Forum zu finden ist.
|
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 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