======================================================
注:本文源代码点此下载
======================================================
技术交流,dh讲解.
哈哈,java和c#里面的for in用起来真爽,我们delphin也不用眼红了,从d2005起,delphi里面也有这个功能了.首先我们要知道哪些类型可以用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
a,b,c:integer;
end;
const
stringexpr='huangjacky';
arrayexpr:array[0..5] of integer= (1,2,3,4,5,6);
setexpr:set of thuangjacky = [hja,hjb,hjd];
procedure tform1.formcreate(sender: tobject);
var
i:integer;
c:char;
d:thuangjacky;
f:tcomponent;
begin
for c in stringexpr do
showmessage(c);
for i in arrayexpr do
showmessage(inttostr(i));
for d in setexpr do
showmessage(inttostr(ord(d)));
for f in self do
showmessage(f.name);
end;
是不是很爽呀?哈哈,delphi也与时俱进呀.
之前写了类助手文章中,老赵问是不是扩展方法,因为对c#没有了解到这么多,所以不知道.
那么我们在java中要for in必须实现iterator吧.
那么delphi的会不会也要呢?
是的,如果我们要自己的类支持for in的话,就必须满足下面的条件:
1 必须有个公共方法getenumerator(),这个方法返回值是一个类,接口或者记录体.
2 上面返回的类,接口或者记录体中又必须有公共方法movenext(),这个方法的返回值是boolean.
3 1中返回的类,接口或者记录体中必须有一个只读的属性current,类型要和集合中的元素一样.
说了这么多,看个例子:
type
tmyintarray = array of integer;
tmyenumerator = class
values: tmyintarray;
index:integer;
public
constructor create;
function getcurrent: integer;
function movenext:boolean;
property current:integer read getcurrent;
end;
tmycontainer= class
public
function getenumerator: tmyenumerator;
end;
constructor tmyenumerator.create;
begin
inherited create;
values := tmyintarray.create(100, 200, 300);
index := -1;
end;
function tmyenumerator.movenext: boolean;
begin
if index
居然发现tmyintarray可以用create方法来创建数组,这个下去去研究下,或者万一兄已经研究过了.
好了,今天就到这里,我是dh.
绿色通道:好文要顶关注我收藏该文与我联系
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/