AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi generische Liste als Parameter, Vererbung
Thema durchsuchen
Ansicht
Themen-Optionen

generische Liste als Parameter, Vererbung

Ein Thema von haentschman · begonnen am 7. Jul 2015 · letzter Beitrag vom 7. Jul 2015
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.432 Beiträge
 
Delphi 12 Athens
 
#1

generische Liste als Parameter, Vererbung

  Alt 7. Jul 2015, 13:23
Delphi-Version: XE
Hallo alle...

Ich habe mehrere generische Listen welche von einer "Basis" Liste abgeleitet sind.
Delphi-Quellcode:
TListBasis<T: class> = class(TObjectList<T>)
public
  constructor Create; virtual;
end;

TList1 = TListBasis<TBlubb>
TList2 = TListBasis<TBla>
Jetzt wollte ich ein Event bauen was bei einer Änderung egal welcher Liste gefeuert wird. Der Empfänger soll dann schauen um welche Liste es sich handelt und entsprechend weiterverarbeiten.
Delphi-Quellcode:
TOnLoadListEvent = procedure (Sender: TObject; aList: TListBasis<T>) of object;

if Assigned(FOnLoadList) then
begin
  FOnLoadList(Self, FList2); // FList2 = Instanz von TList2
end;
...resultiert in:
Zitat:
[DCC Fehler] dAV3_Preferences.pas(14): E2003 Undeklarierter Bezeichner: 'T'
Wo liegt mein Denkfehler? Geht das überhaupt? Welche Alternativen gibt es?

Danke...
  Mit Zitat antworten Zitat
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: generische Liste als Parameter, Vererbung

  Alt 7. Jul 2015, 13:35
TListBasis<T: class> != TListBasis<T> was passiert wenn du das in ersteres änderst?
Chris
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.432 Beiträge
 
Delphi 12 Athens
 
#3

AW: generische Liste als Parameter, Vererbung

  Alt 7. Jul 2015, 13:40
Danke für die Rückmeldung.

Ich habe schon diverse Varianten durch. Diese auch. Ich suche schon den Vormittag nach meinem Denkfehler. Ich denke langsam, das das nicht möglich ist.
  Mit Zitat antworten Zitat
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: generische Liste als Parameter, Vererbung

  Alt 7. Jul 2015, 14:06
habs:

TOnLoadListEvent<T> = procedure (Sender: TObject; aList: TListBasis<T>) of object; Einsatzbeispiel:

Delphi-Quellcode:
  private
    FOnLoadList : TOnLoadListEvent<TBla>;
    { Private-Deklarationen }
  public
    property OnLoadList : TOnLoadListEvent<TBla> read FOnLoadList write FOnLoadList;
-----------------------------------------------------------------------------------

Was nicht geht:

Delphi-Quellcode:
  private
    FOnLoadList : TOnLoadListEvent<T>;
    { Private-Deklarationen }
  public
    property OnLoadList : TOnLoadListEvent<T> read FOnLoadList write FOnLoadList;
da gibt es einen Fehler:

[dcc32 Fehler] Unit2.pas(27): E2511 Typparameter 'T' muss ein Klassentyp sein
Chris
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.432 Beiträge
 
Delphi 12 Athens
 
#5

AW: generische Liste als Parameter, Vererbung

  Alt 7. Jul 2015, 15:06
Danke für deine Bemühungen...

Tja, da kann man dem Event aber nur TBla übergeben. Es sollte aber auch TBlubb gehen. Deshalb hatte ich das über den "Vorfahr" versucht.
Alternative wäre für jeden Listentyp ein getrenntes Event.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: generische Liste als Parameter, Vererbung

  Alt 7. Jul 2015, 15:33
Klarer Fall von "hier fehlt uns die Covarianz in Delphi"
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 7. Jul 2015 um 15:36 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 16:03 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-2025 by Thomas Breitkreuz