![]() |
Klasse in statischen Klassenmethode ermitteln
Hallo zusammen,
ich mag vorher etwas Ausholen, vielleicht fällt euch ja eine bessere Lösung für mein generelles Problem ein. Und zwar mache ich regen Gebrauch von RTTI und Attribute für Properties. Ich finde es z.B. ganz praktisch über die Attribute Spalten aus der Datenbank auf einzelne Properties abzubilden, wobei ich leider immer das Problem habe, dass ich erst mal die richtige Property heraussuchen muss, auf die die Daten gemappt werden sollen. Das will ich wie folgt optimieren: Ich lege eine Klassenvariable an (TStringList/TStringArray) und speichere darin die Zuordnung, also <DB_SPALTE>=<PROPERT_NAME>, sodass ich dann später über einen Getter schnell ran komme. Dies spart mir immer wieder kehrendes Erzeugen des Rtti-Context etc. Nun ist es so, dass ich in der statischen Klassenmethode, die die Zuordnung erzeugt, die Klasse selbst benötige. Wie komme ich an diese ran? Problem hierbei ist, dass das Ganze auch bei Vererbung funktionieren soll, d.h. ich will keinerlei Parameter mit der Klasse selbst hinzufügen müssen. PS: Ich bin jetzt fast soweit, dass ich eine weitere Klasse einführe, die mit alle gewünschten Klassen analysiert und mir die Informationen raus rückt, aber ich will meinen bisherigen Gedanken nicht komplett verwerfen. |
Re: Klasse in Klassenmethode ermitteln
Self.ClassType oder nur ClassType wäre die Klasse selber.
|
Re: Klasse in Klassenmethode ermitteln
Self gibts doch in einem statischen Kontext nicht :mrgreen:
// edit und nur ClassType geht leider auch nicht. |
Re: Klasse in Klassenmethode ermitteln
:gruebel:
Zitat:
Aber wenn es kein Self gibt, dann geht sowas wohl nicht. Zitat:
dafür würde man ebenso class+virtual benötigen (so wie bei den Konstruktoren von TComponent) |
Re: Klasse in statischen Klassenmethode ermitteln
Bin auch gerade dabei eine RttiInfo-Klasse zu basteln, aber gefallen tuts mir nicht wirklich :|
|
Re: Klasse in statischen Klassenmethode ermitteln
Zitat:
Delphi-Quellcode:
In beiden ShowMessages sollte Self = TC = TTestA sein.
type
TTestClass = class of TTest; TTest = class class procedure Test; end; TTestA = class(TTest); procedure TTest.Test; begin ShowMessage(ClassName + ': '+ IntToHEX(Cardinal(Self), 8) + ': '+ IntToHEX(Cardinal(ClassType), 8)); end; procedure Test var TC: TTestClass; begin TC := TTestA; TC.Test; ShowMessage(TC.ClassName + ': '+ IntToHEX(Cardinal(TC), 8) + ': '+ IntToHEX(Cardinal(TC.ClassType), 8)); end; Gruß Hagen |
Re: Klasse in statischen Klassenmethode ermitteln
Zitat:
![]() Da sind paar schöne Patterns drin, welche dir Ideen zu deinen Problemen geben können. Du kannst natürlich auch alternativ einen fertigen ORM nehmen. |
Re: Klasse in statischen Klassenmethode ermitteln
Danke, werde ich mir mal anschauen. Nur muss ich das Projekt nun erst mal abgeben und dann kann ich mir sowas mal näher anschauen :mrgreen:
Löst mein Problem aber nicht direkt. Allgemein gibts so Klassenvariablen scheinbar ja erst seit neueren Delphi-Versionen. Hab das Ganze nun aber schon mit einer speziellen RttiInfo-Klasse umgangen, die eben für meine Business-Objekte geschrieben ist. |
Re: Klasse in statischen Klassenmethode ermitteln
Klassenvariablen gibt es seit Anbegin der praktisch sinnvollen OOP. OOP bedeutet Polymorphie, und das nur dann wenn man auch variable Klassen instanzieren kann. Klassenvariablen sind also ein Muß für die OOP.
Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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