Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Spring Collections erweitern

  Alt 19. Mär 2014, 08:19
Nur um sich die (für Delphi normale) Freigabe eines aggregierten Objekts im Destruktor (oder woanders) zu sparen steigt man wahrscheinlich nicht auf ein komplett neues Collection-Framework um.

Um ehrlich zu sein, war es bei mir aber ähnlich (Spring Collections sind toll).


Von einem Class Helper hast du nichts- Die gehen ja nur für Klassen, Records und einfache Typen (Integer, String, Enums, ...). Interfaces bleiben außen vor.

Ich persönlich würde meinen, dass sich es nur für die (ziemlich triviale) Eigenschaft "Summe aller Items bzgl. einer bestimmten Eigenschaft" auch nicht lohnt: In diesem speziellen Fall würde ich (ja, jedes mal) hingehen, über alle Items drüberrutschen und aufsummieren:

Delphi-Quellcode:
implementation uses Spring.Collections;

type TMyItem = class
   public var länge: Double;
end;

{$R *.dfm}

procedure TForm25.FormCreate(Sender: TObject);
var
   myQueue: IQueue<TMyItem>;
   gesamtlänge: Double;
begin

   myQueue := TCollections.CreateQueue<TMyItem>();

   // [Queue mit Inhalt füllen]

   gesamtlänge := 0;
   myQueue.ForEach(
      procedure(const item: TMyItem)
      begin
         gesamtlänge := gesamtlänge + item.länge;
      end
   );

   ShowMessage( gesamtlänge.ToString() );
end;

Ansonsten habe ich ehrlich gesagt auch nie wirklich Scheu davor, einen neuen Typen für meine ganz speziellen Zwecke zu erstellen. Also

Delphi-Quellcode:
type
   IMyQueue = interface(IQueue<TMyItem>)
      function getGesamtlänge(): Double;
   end;

   TMyQueue = class( Spring.Collections.Queues.TQueue<TMyItem>, IMyQueue)
      public function getGesamtlänge(): Double;
   end;
Dann sind deine Container nicht mehr vom Typ IQueue<TMyItem> sondern IMyQueue
  Mit Zitat antworten Zitat