首先我们要知道哪些类型可以用For In吧,下面就是:
-
for Element in ArrayExpr do
Stmt;
-
for Element in StringExpr do
Stmt;
-
for Element in SetExpr do
Stmt;
-
for Element in CollectionExpr do
Stmt;
-
for Element in Record do
Stmt;
我们来看例子:
type
THuangJacky = (hjA,hjB,hjC,hjD);
TJackyHuang = record
end;
const
procedure TForm1.FormCreate(Sender: TObject);
var
begin
for c in stringExpr do
for i in arrayExpr do
for d in setExpr do
for F in Self do
end;
是不是很爽呀?哈哈,Delphi也与时俱进呀.
之前写了类助手文章中,老赵问是不是扩展方法,因为对C#没有了解到这么多,所以不知道.
那么我们在Java中要For
In必须实现Iterator吧.
那么Delphi的会不会也要呢?
是的,如果我们要自己的类支持For
In的话,就必须满足下面的条件:
1 必须有个公共方法GetEnumerator(),这个方法返回值是一个类,接口或者记录体.
2 上面返回的类,接口或者记录体中又必须有公共方法MoveNext(),这个方法的返回值是Boolean.
3 1中返回的类,接口或者记录体中必须有一个只读的属性Current,类型要和集合中的元素一样.
说了这么多,看个例子:
type
constructor TTest.Create;
begin
end;
function TTest.MoveNext: Boolean;
begin
end;
function TTest.GetCurrent: Integer;
begin
end;
function TMyContainer.GetEnumerator: TTest;
begin
end;
var
begin
end.
居然发现TMyIntArray可以用Create方法来创建数组,这个下去去研究下,或者万一兄已经研究过了.
好了,今天就到这里,我是DH.