技术交流,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 = recorda,b,c:Integer;
end;
conststringExpr='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);
varI:Integer;C:Char;D:THuangJacky;F:TComponent;
begin
for c in stringExpr doShowMessage(C);
for i in arrayExpr doShowMessage(IntToStr(i));
for d in setExpr doShowMessage(IntToStr(Ord(d)));
for F in Self doShowMessage(f.Name);
end;

是不是很爽呀?哈哈,Delphi也与时俱进呀.

之前写了类助手文章中,老赵问是不是扩展方法,因为对C#没有了解到这么多,所以不知道.
那么我们在Java中要For In必须实现Iterator吧.
那么Delphi的会不会也要呢?
是的,如果我们要自己的类支持For In的话,就必须满足下面的条件:
1 必须有个公共方法GetEnumerator(),这个方法返回值是一个类,接口或者记录体.
2 上面返回的类,接口或者记录体中又必须有公共方法MoveNext(),这个方法的返回值是Boolean.
3 1中返回的类,接口或者记录体中必须有一个只读的属性Current,类型要和集合中的元素一样.

说了这么多,看个例子:

typeTMyIntArray = array of Integer;TMyEnumerator = classValues: TMyIntArray;Index:  Integer;publicconstructor Create;function GetCurrent: Integer;function MoveNext:   Boolean;property Current:    Integer read GetCurrent;end;TMyContainer  = classpublicfunction GetEnumerator: TMyEnumerator;end;constructor TMyEnumerator.Create;
begininherited Create;Values := TMyIntArray.Create(100, 200, 300);Index := -1;
end;function TMyEnumerator.MoveNext: Boolean;
beginif Index < High(Values) thenbeginInc(Index);Result := True;endelseResult := False;
end;function TMyEnumerator.GetCurrent: Integer;
beginResult := Values[Index];
end;function TMyContainer.GetEnumerator: TMyEnumerator;
beginResult := TMyEnumerator.Create;
end;varMyContainer: TMyContainer;I: Integer;Counter: Integer;beginMyContainer := TMyContainer.Create;Counter := 0;for I in MyContainer doInc(Counter, I);WriteLn('Counter = ', Counter);
end.

居然发现TMyIntArray可以用Create方法来创建数组,这个下去去研究下,或者万一兄已经研究过了.

好了,今天就到这里,我是DH.

Delphi - 新语法介绍之For In相关推荐

  1. Delphi - 新语法之类相关的

    技术交流,DH讲解. 今天就把Delphi新语法中与类相关都讲了. 1 静态系列. 静态成员变量,静态方法,静态属性. 静态方法只能使用静态成员变量或者其他常量. 一个例子: typeTMyClass ...

  2. 商城项目介绍以及ES6的新语法

    0.学习目标 了解电商行业 了解乐优商城项目结构 能独立搭建项目基本框架 能参考使用ES6的新语法 1.了解电商行业 学习电商项目,自然要先了解这个行业,所以我们首先来聊聊电商行业 1.1.项目分类 ...

  3. Delphi历史版本介绍(二)从Delphi8到DelphiXE3

    Delphi历史版本介绍(二)从Delphi8到DelphiXE3 Delphi 8 Delphi8是一个短命的版本,有点像微软的vista的感觉,没有很好的超越7,后来用被2005取代,很多人都是直 ...

  4. PHP7 RC7 Release对比PHP5.6快速排序20000数据性能体验以及新语法尝鲜

    最近Zend的PHP7已经 处于最后的BUG修复阶段,目前 已经更新RC7,对于Zend官方的说法PHP7的性能大约相比PHP5系列版本 提高2倍以上,增加了一些新的语法,摒弃了PHP5的一些影响性能 ...

  5. 第十六节:语法总结(3)(C#6.0和C#7.0新语法)

    一. C# 6.0 新语法 1. 自动属性初始化可以赋值 1 /// <summary> 2 /// 自动属性初始化 3 /// </summary> 4 public cla ...

  6. 1、ASP.NET MVC入门到精通——新语法

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...

  7. 用新语法写更简洁的ABAP代码

    相比其他语言,ABAP可能有很多特有的长处,但简洁从来就不是它的优点之一. 不像其他语言通过Library提供常用功能,ABAP大量使用内置声明(Built-In Statement) 来完善自身,这 ...

  8. Angular8 - 稳定版修改概述(Angular 8的新特性介绍)

    Angular 8的新特性介绍 在之前Angular团队发布了8.0.0稳定版.其实早在NgConf 2019大会上,演讲者就已经提及了从工具到差分加载的许多内容以及更多令人敬畏的功能.下面是我对8. ...

  9. Swift翻译之-Swift语法入门 Swift语法介绍

    目录[-] Hello world - Swift 简单赋值 控制流 函数与闭包 对象和类 枚举与结构 协议和扩展 泛型 2014.6.3日,苹果公布最新编程语言Swift,Swift是一种新的编程语 ...

最新文章

  1. 第十五届全国大学生智能汽车竞赛确定各分赛区总决赛名单数量分配草案
  2. 解决IntelliJ IDEA无法读取配置文件的问题
  3. pytorch 随机打乱
  4. 141. Linked List Cycle 环形链表
  5. Arduino学习笔记24
  6. Spring的两种代理方式:JDK动态代理和CGLIB动态代理
  7. 如何看注解的源码_我们为什么要看源码、应该如何看源码?
  8. Java基础语法总结(全)
  9. Java实现成语接龙
  10. [libtorrent] windows搭建 libtorrent 开发环境
  11. 看_那人好像一个产品狗_对_这就是产品狗
  12. win10桌面计算机不显示桌面,win10桌面不见了,win10桌面显示不了任何程序
  13. java粘包_Java网络通信基础系列-Netty粘包与拆包
  14. 如何在EF中实现left join(左联接)查询
  15. cmake Could NOT find Boost (missing: xxx 的问题 已解决
  16. python城市经纬度网格_Python3爬虫 利用百度地图api得到城市经纬度
  17. 《沙漠自然教育项目全纪实》发布 圣牧有机让绿色的种子种进更多孩子心里
  18. 分数傅立叶变换的性质
  19. Windows10禁止自动重启和按键盘任意键自动开机
  20. 华为面向5G的室内覆盖数字化概述

热门文章

  1. 竞赛大杀器xgboost,波士顿房价预测
  2. 当代研究生应当掌握的5种Pytorch并行训练方法(单机多卡)
  3. 华人团队用Transformer做风格迁移,速度快、可试玩,网友却不买账
  4. 15岁天才创办4chan匿名网站,如今因股权分配不均,与谷歌不欢而散!
  5. 3月9日起陆续开学!快来看看有没有你所在的省份
  6. 超有趣!LSTM之父团队最新力作:将强化学习“颠倒”过来
  7. 双十一来这儿,华为昇腾的秘密都给你!
  8. 【每日一算法】二叉树的最大深度
  9. 【每日一算法】独特的电子邮件地址
  10. python之matplotlib制作雷达图