快速导航
六、体验泛型数组
七、体验泛型方法
八、体验自定义泛型类
九、体验泛型约束条件
1、类类型约束条件 2、对象类型约束条件 3、构造函数约束条件 4、值类型约束条件 5、多约束条件 6、多模板类型分别约束条件 7、嵌套约束条件
1、类类型约束条件
2、对象类型约束条件
3、构造函数约束条件
4、值类型约束条件
5、多约束条件 6、多模板类型分别约束条件
7、嵌套约束条件
十、关于特化与偏特化
十一、 总结
由于正式版还没有发出,官方的帮助文档也没有泄露,所以我没有办法验证Delphi对泛型的支持到何种程度了。大家对泛型都很熟悉,具体细节我就不多说了。下面将贴出一些代码,用来验证Delphi对泛型的支持并验证是否通过。
1、Delphi2009不支持全局泛型方法,泛型方法只能置于类内或者嵌套在方法内,或者成为类的静态方法。 2、以下代码将打印出传入泛型变量的地址:
以下通过代码针对泛型类,对Delphi2009所支持的泛型约束条件进行验证。
约束模板类型T只能为类类型
约束T只能为某一个对象类型
大家都知道,在C#中,可以使用 T: where new() 对泛型模板类型进行构造函数的约束,指明 类型T 必须有一个可见的构造函数。
在D2009中,我也发现有这样的特性:
约束“: constructor”表明T必须拥有可见的构造函数。
但是,我在使用以下代码时,编译器总是提示编译不通过:
获取是另外一种写法?我没有尝试出来,需要等官方正式版出来才能确认。
Delphi2009的泛型约束不提供值类型约束条件,TGenericsClass1<T: Integer> = class这样的约束编译器是不支持的。所以,像c++中template <Tint S> class TBuf这样的约束在Delphi中行不通。
与C#类似,Delphi2009的多约束条件用来约束T既满足一个类型,又满足一个接口。
有两个模板类型T1、T2,要使用不同的约束分别约束两个模板类型,可以使用以下方法:
Delphi2009的泛型约束条件对嵌套约束条件处理的很好,如:
谢谢网友“装配脑袋”的提醒,我试了很多方法,都没有迹象表明D2009支持C++中模板的特化和偏特化,或者D2009用其他形式的语法表示特化与偏特化,导致我没有试验出来。
总体上来说,D2009从泛型的角度出发,做得已经非常不错了,已经非常接近C#。甚至,D2009还提供类似于C#的关键字“default”,来获取泛型类型T的默认值(值类型置0,引用类型为空指针)。
在接下来的章节里,我会向大家介绍D2009的其他新体验,如:匿名函数和反射(比RTTI更强大)的支持。
昵称: [登录] [注册]
主页:
邮箱:(仅博主可见)
验证码: 看不清,换一个
评论内容:
登录 注册
[使用Ctrl+Enter键快速提交评论]