uses System.Collections, System.Collections.Generic; type c1 = class (IEnumerable) public function IEnumerable.GetEnumerator: IEnumerator; begin Assert(false); end; function GetEnumerator: IEnumerator; begin result:= Seq&().GetEnumerator; end; end; c2 = class (IEnumerable) public function GetEnumerator: IEnumerator; begin result:= Seq&().GetEnumerator; end; function IEnumerable.GetEnumerator: IEnumerator; begin Assert(false); end; end; c3 = class (IEnumerable, IEnumerable) public function GetEnumerator: IEnumerator; begin result:= Seq&().GetEnumerator; end; function IEnumerable.GetEnumerator: IEnumerator; begin Assert(false); end; function IEnumerable.GetEnumerator: IEnumerator; begin Assert(false); end; end; c4 = class (c2) end; begin var v1:= new c1; foreach var item in v1 do ; var v2:= new c2; foreach var item in v2 do ; var v3:= new c3; foreach var item in v3 do ; var v4:= new c4; foreach var item in v4 do ; end.