pascalabcnet/InstallerSamples/LanguageFeatures/ForeachIEnumerable.pas

46 lines
1.2 KiB
ObjectPascal
Raw Permalink Normal View History

// Пример иллюстрирует реализацию классом интерфейса IEnumerable
// для использования его в операторе foreach
2015-05-14 22:35:07 +03:00
type
// Генератор чисел Фибоначчи
FibGen = class(IEnumerable<integer>, IEnumerator<integer>)
2015-05-14 22:35:07 +03:00
private
a,b,n,i: integer;
public
constructor Create(n: integer);
begin
i := -1;
a := 0;
b := 1;
Self.n := n;
end;
function Get_Current: integer;
2015-05-14 22:35:07 +03:00
begin
if i=0 then
Result := 1
else Result := b;
end;
function System.Collections.IEnumerator.Get_Current: object := Get_Current;
function GetEnumerator: IEnumerator<integer> := Self;
function System.Collections.IEnumerable.GetEnumerator: System.Collections.IEnumerator := Self;
2015-05-14 22:35:07 +03:00
function MoveNext: boolean;
begin
i += 1;
Result := i<n;
if i=0 then exit;
(a,b) := (b,a+b);
2015-05-14 22:35:07 +03:00
end;
property Current: integer read Get_Current;
2015-05-14 22:35:07 +03:00
procedure Reset;
begin
end;
procedure Dispose;
begin
2015-05-14 22:35:07 +03:00
end;
end;
begin
writeln('Числа Фибоначчи');
var f := new FibGen(25);
2015-05-14 22:35:07 +03:00
foreach var x in f do
Print(x);
2015-05-14 22:35:07 +03:00
end.