![]() |
Klassen-Konstruktion einmal anders...
Hi!
Ich bae ein paar Klassen, sagen wir mal
Code:
Von TClassA und TClassB möchte ich nun einige Instanzen in einem Array verwalten:
type
TMyCustomClass = class(TObject); [...] TMyClassA = class(TMyCustomClass); [...] TMyClassB = class(TMyCustomClass);
Code:
Dazu soll mit aber eine einzelne Prozedur dienen, der ich nur den Classen-Typ übergebe. Das müsste in etwa so ausssehen:
aMyObjects: array of TMyCustomClass;
Code:
Dass das nicht funktioniert ist ja klar, denn ich versuche eine TClass in eine TMyCumstomClass umzuwandeln und das kann ja nicht gehen.
procedure AddObject(ObjectClass: TClass);
begin SetLength(aMyObjects, Length(aMyObjects) +1); aMyObjects[Length(aMyObjects) -1] := TMyCustomClass(ObjectClass).Create; end; Wie kann ich es aber erreichen, dass ich der Prozedur die Klasse übergebe, die ich erstellen möchte? Hoffe, ich hab meine Problematik halbwegs nachvollziehbar dargestellt. Ganymed [Edit=Sakura]BBCode zugelassen[/Edit] |
Hat sich erledigt :D
|
Hi,
erst einmal herzlich willkommen in der Delphi-PRAXiS. Darf ich Dich noch um einen kleinen Gefallen bitten. Würdest Du Deine Lösung bitte kurz umschreiben, vielleicht hilft es ja mal jemanden, der auf die gleichen Sorgen stößt. ;-) Danke, ...:cat:... |
Ganz einfach mit einem direkten aufruf von:
Delphi-Quellcode:
;)
ObjectClass.Create
|
Re: Klassen-Konstruktion einmal anders...
Tach...
Ich habe gerade ein ähnliches Problem. Ich möchte verschieden Exceptions in einer TList speichern und diese dann bei Bedarf auslösen. Allerdings habe ich das kurze statement von Motzi nicht so ganz verstanden und weis nicht, wie ich aus einer Klassenreferenz eine gültige Instanz erzeugen kann?!?! |
Re: Klassen-Konstruktion einmal anders...
Zitat:
Delphi-Quellcode:
Finde solche lösungen sehr schön. Grade beim abstrahieren von systemen ist das sehr nützlich :-D
type
TExceptClass = class of exception; var exceptClass:TExceptClass; .. exceptClass := TDeineExceptKlasse_irgendeine; .. raise exceptClass.create('Fieser fehler'); |
Re: Klassen-Konstruktion einmal anders...
Tach...
Zuerstmal Danke für deine Hilfe, allerdings weiß ich noch nicht alles was ich wissen muß :lol: Rein theoretisch müsste man dann in einer Klassenreferenz wie
Code:
auch Referenzen auf Derivate von Exception speichern können? Wenn ja, wäre auch eine Zuweisung ala
TCustomExceptionReference = class of Exception;
Code:
möglich.
MyClassReference: TClass;
MyCustomExceptionReference: TCustomExceptionReference; // ... MyClassReference := MyCustomExceptionReferenc; Leider hab ich mit RTTI - Geschichten wenig Erfahrung, daher ist mir mir die Zuweisung etwas unklar:
Code:
MyCustomExceptionReference: TCustomExceptionReference;
// ... MyCustomExceptionReference := @Exception; // oder MyCustomExceptionReference := Exception; |
Re: Klassen-Konstruktion einmal anders...
Zitat:
So, und da das pointer sind kannst du die referenzen auch ganz normal in einer liste verwalten:
Delphi-Quellcode:
wobei die frage wäre ob das sinn macht, da so die klassen ziemlich undifferenzierbar in der liste rum wabern. Eine stringliste macht da schon mehr sinn...ich weiss ja nicht was du vor hast?
type
TCustomExceptionReference = class of Exception; ... var l:Tlist; l.add(Exception); l.add(EMyException); ... // beim rausholen musst du dann casten raise EMyException(l[1]).create('böser fehler'); |
Re: Klassen-Konstruktion einmal anders...
Tach..
Zitat:
Zitat:
Zitat:
|
Re: Klassen-Konstruktion einmal anders...
Zitat:
Macht aber keinen sinn stundenlang drüber zu reden, wenn du nicht sagst was genau du vor hast. Denn meist gibt es einen eleganteren weg! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 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