Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem mit IEnumerable und generics (https://www.delphipraxis.net/162470-problem-mit-ienumerable-und-generics.html)

KalEl 24. Aug 2011 09:54

Delphi-Version: 5

Problem mit IEnumerable und generics
 
Hallo, ich versuche eine Klasse zu basteln die IEnumerator als generic implementiert und habe damit unter Delphi 2009 und 2010 ein Problem, nämlich dass IEnumerator<T> sich von IEnumerator ableitet und beide Interfaces eine GetCurrent Methode enthalten, einmal als function GetCurrent : TObject und einmal als GetCurrent : T

Als Beispiel habe ich eine kleine Klasse implementiert die im Prinzip nur einen Vektor darstellt:

Code:
type
  TVectorClass = class(TObject)
    private
      fX,fY,fZ : Single;
    public
      property x : Single read fX;
      property y : Single read fY;
      property z : Single read fZ;

      constructor Create(x,y,z : Single);
  end;

Nun den entsprechenden IEnumerator dazu:

Code:
type
  TVectorEnumerator = class(TInterfacedObject, IEnumerator<TVectorClass>)
    private
      F_ve : TVectorEnumerable;
      iIndex : Integer;

    public
      constructor Create(rea : TVectorEnumerable);

      function GetCurrent() : TVectorClass;
      function MoveNext() : Boolean;
      procedure Reset();
  end;

Beim Versuch das zu compilieren erhält man einen E2003: Undeklarierter Bezeichner GetCurrent. Natürlich kann man auch nicht beide GetCurrent Methoden parallel implementieren über overload, da sie die selben Parameter (nämlich keine) verwenden... gibt es da irgendeine Lösung wie man einen generischen IEnumerator implementieren kann?

Ich habe einen alten thread gefunden in dem es wohl um das selbe Problem ging, aber da wurde scheinbar keine Lösung gefunden: http://www.delphipraxis.net/126890-i...r-tobject.html

Wäre für jeden Tip dankbar!

chaosben 24. Aug 2011 10:03

AW: Problem mit IEnumerable und generics
 
Die Methoden eines Interfaces kann man auch von einem Sub-Objekt via
Delphi-Quellcode:
implements
implementieren lassen.
Dadurch müsstest du dem Konflikt aus dem Weg gehen können.

Stevie 24. Aug 2011 12:33

AW: Problem mit IEnumerable und generics
 
Dass IEnumerable<T> von IEnumerable und IEnumerator<T> von IEnumerator ableitet, ist eins der dümmsten Aktionen, die sie jemals fabriziert haben. Ja, fein von .Net abgeguckt, aber vergessen, dass Delphi nicht jeden Typ von object ableitet. Ja, es gibt Workarounds. Ich würde aber für deine Fall vorschlagen, dass du dir IEnumerator<T> redefinierst und dann nicht von IEnumerator ableitest. Da diese Interfaces eh fast nirgendwo in Delphi verwendet werden (sie wissen schon, warum...) dürfte das ohne Probleme gehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 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