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
 
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


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 21:18 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 by Thomas Breitkreuz