Werkt anders als een tiet!
Gewoon zoals ik zei. Ben benieuwd wat er dan niet aan werkte...
Staat ook in de Emba DocWiki, al kwam ik er ook door de code completion en de implementatie te volgen. Even opzoeken wat TComparer en TComparison zijn, bijvoorbeeld, kan online, maar net zo makkelijk om even door te klikken in code.
Delphi Code:
type
TMyThingie = class(TCollectionItem)
public
Value: Integer;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// Maak een collection met een specifiek type. Dit is geen generic, maar
// ouderwets polymorphisme met een common basetype en een virtual contstructor.
var coll := TOwnedCollection.Create(self, TMyThingie);
// Voeg twee items toe. Geen generics, dus typecast nodig,
(coll.Add as TMyThingie).Value := 2;
(coll.Add as TMyThingie).Value := 1;
// Sorteer volgens het boekje. De comparer is weliswaar generic, maar <T>
// is altij TCollectionItem, dus geen TMyThingie. Wederom typecast nodig.
coll.Sort(TComparer<TCollectionItem>.Construct(
function(const l, r: TCollectionItem): Integer
begin
Result := (l as TMyThingie).Value - (r as TMyThingie).Value;
end));
// Volgorde is veranderd
ShowMessage((coll.Items[0] as TMyThingie).Value.ToString); // 1
end;
Bookmarks