Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse in statischen Klassenmethode ermitteln (https://www.delphipraxis.net/151673-klasse-statischen-klassenmethode-ermitteln.html)

s.h.a.r.k 27. Mai 2010 16:12


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.

himitsu 27. Mai 2010 17:09

Re: Klasse in Klassenmethode ermitteln
 
Self.ClassType oder nur ClassType wäre die Klasse selber.

s.h.a.r.k 27. Mai 2010 18:48

Re: Klasse in Klassenmethode ermitteln
 
Self gibts doch in einem statischen Kontext nicht :mrgreen:

// edit
und nur ClassType geht leider auch nicht.

himitsu 27. Mai 2010 19:04

Re: Klasse in Klassenmethode ermitteln
 
:gruebel:

Zitat:

Zitat von s.h.a.r.k
und nur ClassType geht leider auch nicht.

Sowas geht nur, wenn Self der Standardnamespace an dieser Stelle ist.

Aber wenn es kein Self gibt, dann geht sowas wohl nicht.

Zitat:

dass das Ganze auch bei Vererbung funktionieren soll
aber das wäre bei Statisch auch nicht gegangen
dafür würde man ebenso class+virtual benötigen (so wie bei den Konstruktoren von TComponent)

s.h.a.r.k 27. Mai 2010 19:08

Re: Klasse in statischen Klassenmethode ermitteln
 
Bin auch gerade dabei eine RttiInfo-Klasse zu basteln, aber gefallen tuts mir nicht wirklich :|

negaH 27. Mai 2010 22:10

Re: Klasse in statischen Klassenmethode ermitteln
 
Zitat:

statischen Klassenmethode
In diesem Fall ist Self in dieser Methode die Klasse selber.

Delphi-Quellcode:
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;
In beiden ShowMessages sollte Self = TC = TTestA sein.

Gruß Hagen

generic 27. Mai 2010 22:26

Re: Klasse in statischen Klassenmethode ermitteln
 
Zitat:

Zitat von s.h.a.r.k
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.

Schau dir mal dieses Buch an:
Patterns of Enterprise Application Architecture
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.

s.h.a.r.k 28. Mai 2010 00:28

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.

negaH 28. Mai 2010 10:11

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 13:00 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