interface
uses
Classes, sysutils;
type
{ gP3DCustomListEnumerator }
generic gP3DCustomListEnumerator < TCustomItem: TObject > = class ( TInterfacedPersistent, IEnumerator )
private type
TMoveNext = function ( var Index: Integer ): TCustomItem of object;
private
FCurrent: TCustomItem;
FCurrentIdx: Integer;
FMoveNext: TMoveNext;
function GetCurrent(): TCustomItem;
procedure Reset();
public
constructor Create( AMoveNext: TMoveNext );
function MoveNext: Boolean;
property Current: TCustomItem read GetCurrent;
property CurrentIdx: Integer read FCurrentIdx;
end;
{ gP3DCustomObjectList }
generic gP3DCustomObjectList <TCustomItem: TObject> = class ( TInterfacedPersistent, IEnumerable ) //Hier kommt die Fehlermeldung
type
TP3DCustomObjectListEnumerator = specialize gP3DCustomListEnumerator < TCustomItem >;
private
FItems: TList;
FOnChange: TNotifyEvent;
function GetCount: Integer;
procedure SetCount( AValue: Integer );
function GetItems( Index: Integer ): TCustomItem;
function MoveNext( var Index: Integer ): TCustomItem;
public
constructor Create;
destructor Destroy; override;
function Add( Item: TCustomItem ): Integer; virtual;
procedure Delete( Index: Integer ); virtual;
function IndexOf( Item: TCustomItem ): Integer; virtual;
procedure Clear( const FreeObjects: Boolean = False ); virtual;
function GetEnumerator(): TP3DCustomObjectListEnumerator;
procedure Insert( Index: Integer; Item: TCustomItem );
property Items[ Index: Integer ]: TCustomItem read GetItems; default;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
published
property Count: Integer read GetCount write SetCount;
end;
Fehler: p3dgenerics.pas(31,59) Error: No matching implementation for interface method "GetEnumerator:IEnumerator;" found
Meiner Meinung nach habe ich das doch implementiert (Die abgeleitete Klasse gP3DCustomListEnumerator implementiert IEnumerator), aber ich kenne mich noch nicht so gut mit Interfaces aus.
Weiß nicht ob das vom Compiler her so gedacht ist mehrer Interfaces (Es ist ja ein Generic) mit der gleichen GUID zu verwenden aber es funktioniert und wenn man die Supports Funktion benutzen will brauch man das ja anscheinend.