Dephi泛型
TArray TEnumerator(抽象) TEnumerable(抽象)
实际使用:TList TQueue TStack TPair TDictionary ,内部都包含 TValueEnumerator
碰到对象:TObjectList TObjectQueue TObjectStack TObjectDictionary
另外haiy:TThreadedQueue
比如以前Delphi没有integer list,用泛型,我们可以这样声明:
var
list: TList<Integer>;
i:integer;
begin
list := TList<Integer>.Create;
list.Add(1);
list.Add(2);
list.Add(3);
list.Items[2] := 8;
for I := 0 to List.Count-1 do
ShowMessage(IntToStr(List.Items[i]));
list.Free;
end;
TDictionary类是一个name,value容器,内部是哈希索引,所以对于数据查找非常高效,如下面的代码:
var
Dict: TDictionary<string, string>;
begin
Dict := TDictionary<string, string>.Create;
Dict.Add('key1', 'value1');
Dict.Add('key2', 'value2');
if not Dict.ContainsKey('key3') then
Dict.Add('key3','value3');
Dict.Free;
end;
上面的代码中name和value都是string类型,实际应用中可以用其它的类型比如integer,double之类
因为Object Pascal没有垃圾收集,所以对应的每种泛型类都有一个对应引用类型实现,比如TObjectList,TObjectDictionary,这些类实现中, 当删除元素时会自动帮你释放对象。
上面的TList和TDictionary在Generics.Collections单元,有兴趣可以研究一下代码。除了已有的泛型类之外,你可以编写自己的泛型类,感兴趣的朋友可以google相关文章。
几本参考书:
http://www.cnblogs.com/del/archive/2008/08/15/1268786.html
http://read.pudn.com/downloads161/ebook/731442/delphi-generics.pdf
http://www.jcolibri.com/articles/prog_objet_composants/delphi_generics/delphi_generics.html
http://www.danysoft.com/free/using-new-delphi-coding-styles-and-architectures-marco-cantu.pdf
http://docwiki.embarcadero.com/CodeExamples/XE5/en/Generics_Collections_TList_(Delphi)
http://www.felix-colibri.com/papers/oop_components/delphi_generics_tutorial/delphi_generics_tutorial.html
Dephi泛型的更多相关文章
- Dephi泛型generic的应用
Dephi泛型generic的应用 泛型在C++, C#中已有广泛应用,Delphi自2009版本也引入泛型,典型的应用如TList,TDictionary.如果你熟悉C#,其用法十分类似. 比如 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- C#4.0泛型的协变,逆变深入剖析
C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)
建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- C#泛型详解(转)
初步理解泛型: http://www.cnblogs.com/wilber2013/p/4291435.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber ...
- C# 泛型
C# 泛型 1.定义泛型类 在类定义中包含尖括号语法,即可创建泛型类: class MyGenericClass<T> { //Add code } 其中T可以遵循C#命名规则的任意字符. ...
- java8中lambda表达式的应用,以及一些泛型相关
语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...
随机推荐
- 我只能说,Spring Data REST真的很燥辣
我自己写REST,到一半了,突然想试一下Spring Data REST,还真不是乱说, 燥辣得很,短时间全生成,快赶上DJANGO的速度了.怕了我. 参考文档: Spring Data REST入门 ...
- 解析 Lambda 表达式
我们先创建一个表达式树: Expression<Func<int, int, int>> expression = (a,b) => a + b; 我们的例子是一个Exp ...
- poj2406(后缀数组)
poj2406 题意 给出一个字符串,它是某个子串重复出现得到的,求子串最多出现的次数. 分析 后缀数组做的话得换上 DC3 算法. 那么子串的长度就是 \(len - height[rnk[0]]\ ...
- LIS【p1704】寻找最优美做题曲线
Description 洛谷OJ刷题有个有趣的评测功能,就是系统自动绘制出用户的"做题曲线".所谓做题曲线就是一条曲线,或者说是折线,是这样定义的:假设某用户在第b[i]天AC了c ...
- sql server mvp 听风吹雨
http://www.cnblogs.com/gaizai/p/4087321.html
- WEB将本地项目添加到git
前提下载好git bush1.找到对应的文件夹git init2.Windows下打开Git Bash$ ssh-keygen -t rsa -C "myaccount@example.co ...
- linux 通过两个网卡,连接不同的不同的网段
linux数据包转发功能 A:192.168.xxx.xxx B:172.24.xxx.xxx, 从而实现了A网段和B网段的互通. 原因Linux机器可以通过设置实现数据包的转发功能. #echo ...
- JPEG编码(二)
来自CSDN评论区http://bbs.csdn.net/topics/190980 1. 色彩模型 JPEG 的图片使用的是 YCrCb 颜色模型, 而不是计算机上最常用的 RGB. 关于色彩模型, ...
- STL 源码分析 (SGI版本, 侯捷著)
前言 源码之前,了无秘密 algorithm的重要性 效率的重要性 采用Cygnus C++ 2.91 for windows cygwin-b20.1-full2.exe 下载地址:http://d ...
- sass高级语法的补充
1. 继承 2.混入 3.函数 我这篇博客需要点基础才能看懂, 但我这篇博客是对上一篇的 sass高级语法 的补充 从这方面来看也无所谓了