AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie dynamischer Vorfahr für generische Klasse?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie dynamischer Vorfahr für generische Klasse?

Ein Thema von himitsu · begonnen am 15. Mär 2010 · letzter Beitrag vom 15. Mär 2010
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von himitsu
himitsu
Online

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

Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 10:42
Praktisch möchte ich sowas haben,
Delphi-Quellcode:
TMyClass<Ancestor: Class> = Class(Ancestor)
* ^^^^^^^^
aber Delphi meint nur
Zitat:
[DCC Fehler] ...: E2021 Klassentyp erwartet
Denn diese Klasse soll selber nur eine gewisse Funktionalität für andere, davon abgeleitete Klassen bereitstellen, aber ich wollte den anderen Klassen nicht die Möglichkeit nehmen, jeweil einen "anderen" Vorfahren zu nutzen.


z.B.
TTest = Class(TMyClass<TComponent>) wobei es quasi dem entspricht, nur daß eben meine gen. Klasse hier noch mit dazwischen eingefügt wird.
TTest = Class(TComponent)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.994 Beiträge
 
Delphi 12 Athens
 
#2

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 10:48
Ich fürchte, da wirst du zur Zeit kein Glück haben. Mach dafür doch ein Feature-Request in QC auf.

Eventuell kannst du das aber mit Aggregation oder einem Decorator lösen.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 11:06
Nee, andere Wege helfen hier leider nichts,
denn wenn z.B. TMyClass direkt von TObject abgeleitet ist (alles Andere wäre Aufgrund des "unbekannten" Basistyps nicht sinvoll),
dann hätte auch TTest nur TObject als Vorfahre und wäre dann, laut dem Beispiel, nicht mit TComponent kompatibel und somit kann man diese Klasse auch nicht als "Komponente" einsetzen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 11:30
Zitat von himitsu:
Denn diese Klasse soll selber nur eine gewisse Funktionalität für andere, davon abgeleitete Klassen bereitstellen...
Was wäre das konkret?
Ich kann mir nicht so richtig vorstellen, welche Funktionalität auf beliebige Klassen vererbt werden soll.
Welche Funktionalität ist so allgemein nützlich, dass man sie im Prinzip in jeder Klasse brauchen kann?
(etwa Logging oder Persistenz der Objektdaten?)
Andreas
  Mit Zitat antworten Zitat
HERMES

Registriert seit: 29. Nov 2004
142 Beiträge
 
#5

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 11:30
Man kann auch Typschranken für Generics angeben, das müsste dann aber so aussehen

TMyClass<A:TAncestor> = Class(TAncestor) Das legt fest, dass alle Klassen mit denen du deinen generische Klasse initialisierst vom Typ TAncester oder eine davon abgeleitete Klasse sein muss.

Wenn du class als Schranke angibst kannste du das auch gleich weglassen.


Zitat:
Denn diese Klasse soll selber nur eine gewisse Funktionalität für andere, davon abgeleitete Klassen bereitstellen, aber ich wollte den anderen Klassen nicht die Möglichkeit nehmen, jeweil einen "anderen" Vorfahren zu nutzen.
Ich weis nicht ob ich dich richtig verstanden habe, aber du hast doch dann immer noch das "Problem", dass du TAncester statisch angeben musst.

EDIT: Aber andereseits, wenn du nur Funktionalität für Klassen die von der Klasse selbst abgeleietet sind anbieten möchtest brauchst du doch garkeine generics, da ein Obertyp der Klasse bekannst ist und die dynamische Bindung den Rest erledigen sollte.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 11:39
Neee, det "Basistyp ist eben hier noch nicht festgelegt, dieser ist in der generischen Klasse noch unbekannt und wird erst in der Ableitung entschieden.

Ich wollte auf diese Weise eine allgemeine Verwaltung einer verketteten Liste implementieren.
Bei dieser Verwaltung ist der "Basistyp" unwichtig.

Das : Class soll nur sicherstellen, daß dort nur irgendeine Klasse angegeben werden kann,
aber welche Klasse das nun sein soll, ist ja nicht wichtig.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.994 Beiträge
 
Delphi 12 Athens
 
#7

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 11:47
Und was spricht gegen sowas?

Delphi-Quellcode:
type
  TListNode<T> = class
  private
    FData: T;
    FNext: TListNode<T>;
    FPrev: TListNode<T>;
  public
    property Data: T read FData write FData;
    property Next: TListNode<T> read FNext write FNext;
    property Prev: TListNode<T> read FPrev write FPrev;
  end;
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 12:05
@Uwe:
Delphi-Quellcode:
var X: TListNode<TStringList>;

if X is TStringList then // geht nicht, da keine Stringliste
Das ist halt mein Problem.
Ich möchte den Basistypen ändern und nicht irgendeinen inneren Typen
und dafür muß man den Basistypen von TListNode ändern.
TListNode<T> = class(Basistyp)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 12:11
Schaut wie das hier aus.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.994 Beiträge
 
Delphi 12 Athens
 
#10

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 12:13
Zitat von himitsu:
Delphi-Quellcode:
var X: TListNode<TStringList>;

if X is TStringList then // geht nicht, da keine Stringliste
Klar, aber dann schreib doch einfach

if X.Data is TStringList then
Uwe Raabe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 11:29 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