2
0

tgeneric11.pp 843 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. {$mode objfpc}
  2. type
  3. generic TList<_T>=class(TObject)
  4. var public
  5. data : _T;
  6. procedure Add(item: _T);
  7. procedure Assign(Source: specialize TList<_T>);
  8. end;
  9. procedure TList.Add(item: _T);
  10. begin
  11. data:=item;
  12. end;
  13. procedure TList.Assign(Source: specialize TList<_T>);
  14. begin
  15. data:=Source.data;
  16. end;
  17. type
  18. TMyIntList = specialize TList<integer>;
  19. TMyStringList = specialize TList<string>;
  20. var
  21. ilist1, ilist2 : TMyIntList;
  22. slist1, slist2 : TMyStringList;
  23. begin
  24. ilist1 := TMyIntList.Create;
  25. ilist1.add(10);
  26. ilist2 := TMyIntList.Create;
  27. ilist2.add(20);
  28. ilist2.assign(ilist1);
  29. if ilist2.data <> 10 then
  30. halt(1);
  31. slist1 := TMyStringList.Create;
  32. slist1.add('test');
  33. slist2 := TMyStringList.Create;
  34. slist2.add('hello');
  35. slist2.assign(slist1);
  36. if slist2.data <> 'test' then
  37. halt(1);
  38. end.