AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Per-Type-Class-Var?

Ein Thema von himitsu · begonnen am 18. Jun 2014 · letzter Beitrag vom 18. Jun 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

Per-Type-Class-Var?

  Alt 18. Jun 2014, 18:09
Delphi-Version: XE5
PS: Da oben gibt es immernoch kein XE6 (wobei ich hier eher ein XE7+ gebraucht hätte )

Kleines billiges Beispiel:
Delphi-Quellcode:
type
  TMyBaseClass = class
  private
    class var FMyVar: TMyBaseClass;
  public
    class function CreateGlobalInstance: TMyBaseClass;
  end;

  TMyClassA = class(TMyBaseClass)
  end;

  TMyClassB = class(TMyBaseClass)
  end;

  TMyClassC = class(TMyClassB)
  end;
Hier haben ja nun alle Klassen nur die eine Variable.

Nun kann man in der Basisklasse das z.B. über ein TObjectDictionary<TMyBaseClassClass,TMyBaseClass> lösen,
oder man führt in jedem Nachfahren ein eigene Variable ein. (sowas in der Art hab ich schon paar Mal gesehn)
Delphi-Quellcode:
type
  TMyBaseClass = class
  private
    class var FMyVar: TMyBaseClass;
    class function GetMyVar: PMyBaseClass; virtual; // oder halt je ein virtueller Getter und Setter
  public
    class function CreateGlobalInstance: TMyBaseClass;
  end;

  TMyClassA = class(TMyBaseClass)
  private
    class var FMyVar: TMyBaseClass;
    class function GetMyVar: PMyBaseClass; override;
  end;
Mal so als Frage:
Wie oft wird sowas eigentlich benötigt
und wäre es nicht schöner, wenn Delphi von selber diese Variable verwalten könnte?

Mir ist grade der Gedanke gekommen, daß Delphi das eigentlich selber können dürfte und das ohne große neue Erfindungen.
Delphi-Quellcode:
type
  TMyBaseClass = class
  private
    class var FMyVar: TMyBaseClass; virtual;
  public
    class function CreateGlobalInstance: TMyBaseClass;
  end;

  TMyClassA = class(TMyBaseClass)
  private
    //class var FMyVar: TMyBaseClass; // automatisch vom Delphi erstellt
  end;
* bei Ableitungen schiebt Delphi eine implizite Kopie dieser Class-Var jeweils mit in die neue Klasse rein
* in der Basisklasse würde nun, wie bei virtiellen Methoden, ein Eintrag in der VMT mit angelegt (der Zeiger auf die Variable ist ja genauso groß, wie ein Zeiger auf 'ne Methode)
* in den Ableitungen wird dann jeweils dieser Zeiger auf die eigene Variable umgeschrieben
* beim Zugriff auf die Variable würde das dann wie bei Klassen-Feldern gehen, also mit dem Pointer aus der Klassendeklaration wird auf die richtige Variable umgeleitet.
$2B or not $2B
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Per-Type-Class-Var?

  Alt 18. Jun 2014, 18:27
Falls ich es richtig verstehe: Das fände ich alles andere als intuitiv und hätte ich auch nirgendwo so schon mal gesehen-
Ich erbe also eine statische Variable die in Wirklichkeit doch nicht geerbt ist (in der Oberklasse unbekannt)? Da führe ich die Variable doch lieber in meiner Unterklasse neu auf.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Per-Type-Class-Var?

  Alt 18. Jun 2014, 19:04
Drum ja erstmal so als Frage, ob sich das überhaupt lohnt.


Ich hatte grade noch schnell einen Code repariert, welcher nach dem ersten (falschen) Schema aufgebaut war und man wunderte sich, warum es manchmal knallt.
Nach einen Neustart des Programms ging es erstmal wieder, was bei den ersten paar auftretenden Fehler auch angewand wurde.
(es knallte ja erst bei Verwendung einer zweiten/anderen Instanz)
Nur gut, daß es bei der Vorführung bei einem neuen Kunden zufällig nicht knallte.

Wie gesagt,
- theoretisch dürfte Emba sowas mit relativ wenig Aufwand einbauen können
- nja, was das Verständnis angeht ... das ist doch genau wie bei den virtuellen Methoden ... da lernt man das auch irgendwann wann und warum welche der Methoden verwendet wird.
- und von der Syntax her gibt es auch keine Probleme
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Per-Type-Class-Var?

  Alt 18. Jun 2014, 19:40
Über das Thema hat schon anno 2007 Hallvard Vassbotn etwas geschrieben.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (18. Jun 2014 um 20:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Per-Type-Class-Var?

  Alt 18. Jun 2014, 19:59
Also sooooooooooo bescheuert ist die Idee dann wohl doch nicht?


Das mit dem VIRTUAL hinten, also ja, ich fänd es auch nich schlecht, wenn es weiter vorne steht,
aber virtual class var (klingt besser als sein class virtual var ) ist von der Syntax her zu gefährlich, da ein vergessene ";" diese Position zu unsicher macht.
Bei class specific var müsste man sicherheitshalber ein neues reserviertes Wort einführen, was nicht unbedingt Ideal wäre.
Und das VIRTUAL dahinter ist eben absolut problemlos.

OMG, da hätte Codegear (kennt die noch wer?) das ja glatt schon einbauen können.

Und die Idee mit der VMT war dann auch nicht so verkehrt.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Per-Type-Class-Var?

  Alt 18. Jun 2014, 20:05
Die Technik, die Hallvard in Part II beschreibt, wird auch von mORMot benutzt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Per-Type-Class-Var?

  Alt 18. Jun 2014, 20:22
Die Technik, die Hallvard in Part II beschreibt
Zitat:
Per-class variable in the VMT
Stimmt, Delphi hat solche Variablen ja bereits schon seit Jahrzehnten eingebaut ... nur nicht von uns direkt für eigene Variablen nutzbar

Man stelle sich mal vor mORMot könnte das nativ nutzen und müsste sich nicht verbiegen.
Das Problem ist ja auch noch, daß es jetzt nicht mehr nur Win32 gibt und man das dann überall extra anpassen muß.

Drum wären mir native Wege eben lieber.
So wie auch bei den virtuellen Methoden.
$2B or not $2B

Geändert von himitsu (18. Jun 2014 um 20:25 Uhr)
  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 00:32 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