AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Klasse in statischen Klassenmethode ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse in statischen Klassenmethode ermitteln

Ein Thema von s.h.a.r.k · begonnen am 27. Mai 2010 · letzter Beitrag vom 28. Mai 2010
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Klasse in statischen Klassenmethode ermitteln

  Alt 27. Mai 2010, 17:12
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Klasse in Klassenmethode ermitteln

  Alt 27. Mai 2010, 18:09
Self.ClassType oder nur ClassType wäre die Klasse selber.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: Klasse in Klassenmethode ermitteln

  Alt 27. Mai 2010, 19:48
Self gibts doch in einem statischen Kontext nicht

// edit
und nur ClassType geht leider auch nicht.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Klasse in Klassenmethode ermitteln

  Alt 27. Mai 2010, 20:04


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)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: Klasse in statischen Klassenmethode ermitteln

  Alt 27. Mai 2010, 20:08
Bin auch gerade dabei eine RttiInfo-Klasse zu basteln, aber gefallen tuts mir nicht wirklich
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#6

Re: Klasse in statischen Klassenmethode ermitteln

  Alt 27. Mai 2010, 23:10
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
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Klasse in statischen Klassenmethode ermitteln

  Alt 27. Mai 2010, 23:26
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#8

Re: Klasse in statischen Klassenmethode ermitteln

  Alt 28. Mai 2010, 01:28
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

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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Klasse in statischen Klassenmethode ermitteln

  Alt 28. Mai 2010, 11:11
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 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