К этому http://delphiway.ru/enumerators-%D0%B2-delphi-%D1%87%D0%B0%D1%81%D1%82%D1%8C-2/
Еще можно объявить enumerator для for-in не как class, а как record с нужными методами и поэкономить "на спичках" за счет выделения память под этот enumerator (ибо компилятор генерит try..finally, в котором enumerator, объявленный как класс создается, с ним что-то делается, а в конце - ему зовется Destroy):
К нему же можно добавить class operator Increment, class operator Decrement и class operator Equal / NotEqual и тогда можно так:
Еще можно объявить enumerator для for-in не как class, а как record с нужными методами и поэкономить "на спичках" за счет выделения память под этот enumerator (ибо компилятор генерит try..finally, в котором enumerator, объявленный как класс создается, с ним что-то делается, а в конце - ему зовется Destroy):
type TSomeListEnumerator = record private f_CurrentIndex: Integer; f_List: TSomeList; function GetCurrent: TSomeListItem; public constructor Create(AList: TSomeList); function MoveNext: Boolean; property Current: TSomeListItem; end;
К нему же можно добавить class operator Increment, class operator Decrement и class operator Equal / NotEqual и тогда можно так:
l_Enum := l_List.GetEnumerator; //в сторону к концу while (l_Enum <> l_List.EndEnum) do begin ... Inc(l_Enum); end; //обратно while (l_Enum <> l_List.StartEnum) do begin ... Dec(l_Enum); end;
Комментариев нет:
Отправить комментарий