![]() |
Generics
Wenn ich versuche, das zu komplilieren
Delphi-Quellcode:
bekomme ich für BaseEvent
type
TEventChain<T> = class constructor Create; destructor Destroy; procedure ChainEvent(NewEvent: T); function AttachEvent(OldEvent:T):T; procedure BaseEvent<T>; end;
Delphi-Quellcode:
Warum?
[dcc32 Hinweis] Unit4.pas(19): H2509 Bezeichner 'T' steht im Konflikt mit Typparametern des Container-Typs
Ich würde gern sowas machen: XY:=TEventChain<TNotifyEvent>.create; Und hier
Delphi-Quellcode:
erhalte ich
function TEventChain<T>.AttachEvent(OldEvent: T): T;
begin Result := BaseEvent; EventList.Add(OldEvent); end;
Delphi-Quellcode:
Was übersehe ich da?
[dcc32 Fehler] Unit4.pas(74): E2531 Methode 'BaseEvent' erfordert explizite Typargumente
|
AW: Generics
Delphi-Quellcode:
statt nur
BaseEvent<T>
Delphi-Quellcode:
unten in der Funktion sollte das Problem beheben. Der Typ kann in diesem Falle nicht automatisch abgeleitet werden.
BaseEvent
|
AW: Generics
Nope.
Delphi-Quellcode:
[dcc32 Fehler] Unit4.pas(76): E2010 Inkompatible Typen: 'T' und 'procedure, untyped pointer or untyped parameter'
|
AW: Generics
Wie schon gesagt: Da nichts über T bekannt ist, kannst du T auch nicht aufrufen oder eine Methode als T zurückgeben. Was du vorhast, geht so nicht.
|
AW: Generics
Ok, ja, das hat Sinn, wenn man es so betrachtet. Danke!
|
AW: Generics
Bist du sicher, dass
Delphi-Quellcode:
nicht eigentlich
BaseEvent
Delphi-Quellcode:
sein soll, statt
function BaseEvent: T
Delphi-Quellcode:
? Anders macht es nämlich nicht wirklich Sinn.
procedure BaseEvent<T>
|
AW: Generics
Das passt schon so. Der Aufruf wäre so:
AttachEvent(grid.OnResize); Und die Methode sichert den aktuellen Event in einer Liste und weist einen neuen Event zu - eben BaseEvent, der dann dafür sorgt, dass der alte Event und allfällige weitere aufgerufen wird. Das war der Plan :- ) |
AW: Generics
Delphi-Quellcode:
klappt aber trotzdem nur, wenn
Result := BaseEvent
Delphi-Quellcode:
eine
BaseEvent
Delphi-Quellcode:
ist :P
function
|
AW: Generics
So geht´s natürlich - ohne Generics:
Delphi-Quellcode:
TNotifyEventChain = class
EventList: IList<TNotifyEvent>; constructor Create; destructor Destroy; procedure ChainEvent(NewEvent: TNotifyEvent); function AttachEvent(OldEvent:TNotifyEvent):TNotifyEvent; procedure BaseEvent(Sender:TObject); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 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