delphi 11新特性泛型,delphi2010从入门到精通
今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!
1、由于正式版还没有发出官方的帮助文档也没有泄露所以我没有办法验证Delphi对泛型的支持到何种程度了大家对泛型都很熟悉具体细节我就不多说了下面将贴出一些代码用来验证Delphi对泛型的支持并验证是否通过
2、六体验泛型数组 program TestGenericArray;{$APPTYPE CONSOLE} uses SysUtils; type TArr<T>= array of T; var arr: TArr<Integer>; n: Integer; begin Setlength(arr); for n:= to do begin arr[n]:= n; end; end七体验泛型方法
3、 Delphi不支持全局泛型方法泛型方法只能置于类内或者嵌套在方法内或者成为类的静态方法
4、以下代码将打印出传入泛型变量的地址 program TestGenericArray;{$APPTYPE CONSOLE} uses SysUtils; type TGeneric= class class procedure PrintAddress<T>(aVal: T); end; var n: Integer;{ TGeneric} class procedure TGeneric PrintAddress<T>(aVal: T); begin Writeln(Integer(@aVal)); end; begin n:=; TGeneric PrintAddress<Integer>(n); end
5、八体验自定义泛型类 program TestGenericClass;{$APPTYPE CONSOLE} uses SysUtils; type TGenericsClass<T>= class private fValue: T; public constructor Create(aValue: T); virtual; property Value: T read fValue write fValue; end; var gc: TGenericsClass<Integer>;{ TGenericsClass<T>} constructor TGenericsClass<T> Create(aValue: T); begin fValue:= aValue; end; begin gc:= TGenericsClass<Integer> Create(); Writeln(gc Value); FreeAndNil(gc); Readln; end
6、以下通过代码针对泛型类对Delphi所支持的泛型约束条件进行验证
7、约束模板类型T只能为类类型 program TestGenericClass;{$APPTYPE CONSOLE} uses SysUtils; type TGenericsClass<T: class>= class//注意在此进行约束 private fValue: T; public constructor Create(aValue: T); virtual; property Value: T read fValue write fValue; end; var gc: TGenericsClass<TObject>;{ TGenericsClass<T>} constructor TGenericsClass<T> Create(aValue: T); begin fValue:= aValue; end; begin gc:= TGenericsClass<TObject> Create(nil); Writeln(gc Value= nil); FreeAndNil(gc); Readln; end
8、约束T只能为某一个对象类型 program TestGenericArray;{$APPTYPE CONSOLE} uses SysUtils Classes Contnrs; type TGenericsClass<T: TList>= class//注意在此进行约束 private fValue: T; public constructor Create(aValue: T); virtual; property Value: T read fValue write fValue; end; var gc: TGenericsClass<TObjectList>;{ TGenericsClass<T>} constructor TGenericsClass<T> Create(aValue: T); begin fValue:= aValue; end; begin gc:= TGenericsClass<TObjectList> Create(nil); Writeln(gc Value= nil); FreeAndNil(gc); Readln; end构造函数约束条件
9、大家都知道在C#中可以使用 T where new()对泛型模板类型进行构造函数的约束指明类型T必须有一个可见的构造函数
10、在D中我也发现有这样的特性 TGeneric<T: constructor>= class public constructor Create; virtual; end;约束 constructor表明T必须拥有可见的构造函数
11、但是我在使用以下代码时编译器总是提示编译不通过 var t: T; begin t:= T Create; end;
12、获取是另外一种写法?我没有尝试出来需要等官方正式版出来才能确认
13、 Delphi的泛型约束不提供值类型约束条件 TGenericsClass<T Integer>= class这样的约束编译器是不支持的所以像c++中template<Tint S> class TBuf这样的约束在Delphi中行不通
14、与C#类似 Delphi的多约束条件用来约束T既满足一个类型又满足一个接口 program TestGenericArray;{$APPTYPE CONSOLE} uses SysUtils Classes Windows Contnrs; type IInt= Interface procedure Test; End; TImp= class(TInterfacedObject IInt) public procedure Test; end; TGenericsClass<T: class IInt>= class//注意在此进行约束 private fValue: T; public constructor Create(aValue: T); virtual; property Value: T read fValue write fValue; end; var gc: TGenericsClass<TImp>;{ TGenericsClass<T>} constructor TGenericsClass<T> Create(aValue: T); begin fValue:= aValue; end;{ TImp} procedure TImp Test; begin end; begin gc:= TGenericsClass<TImp> Create(nil); Writeln(gc Value= nil); FreeAndNil(gc); Readln; end多模板类型分别约束条件
15、有两个模板类型T T要使用不同的约束分别约束两个模板类型可以使用以下方法 type TGenericsClass<T: class; T: TList>= class//注意在此进行约束用将两个模板类型分开进行分别约束 private end;嵌套约束条件 Delphi的泛型约束条件对嵌套约束条件处理的很好如 TFelix<T>= class public end; TGenericsClass<T: class; T: TFelix<T>>= class//注意在此进行约束用将两个模板类型分开进行分别约束 private end;十关于特化和偏特化
16、谢谢网友装配脑袋的提醒我试了很多方法都没有迹象表明D支持C++中模板的特化和偏特化或者D用其他形式的语法表示特化与偏特化导致我没有试验出来
17、总体上来说 D从泛型的角度出发做得已经非常不错了已经非常接近C#甚至 D还提供类似于C#的关键字 default来获取泛型类型T的默认值(值类型置引用类型为空指针)
1、dbexpress是BORLAND自主的数据引擎,ADO是MS的。DELPHI更好地支持dbexpress的应用,优点是效率高、跨平台;缺点是发布可能麻烦些。就目前看来,dbexpress设计程序方便性不如ado。
2、如果从学习的角度考虑,ADO可能比较好,必竟是MS自己的东西,一定时期还占领主力市场。dbexpress说不定哪天又像BDE一样又被不支持了。
wwW.Xtw.Com.cN系统网专业的PC、手机系统开发下载平台,HarmonyOS系统、安卓、OS、windows电脑重装系统在线下载安装,操作系统平台技术学习,攻略教程,技术交流。
免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!
联系邮箱:773537036@qq.com
相关推荐
-
delphi7鍜宒elphi xe鍖哄埆,delphi xe5
2023-12-05 08:23:46 -
delphi 11新特性泛型,delphi2010从入门到精通
2023-12-05 04:19:38 -
delphi连接口提示授权错误,delphi access violation
2023-10-22 01:15:44 -
shellexecute用法,delphi shellexecute
2023-10-20 19:28:24 -
delphi2009在哪下载,delphi经典版本最新绿色版
2023-10-14 20:22:46 -
php四舍五入的函数,php四舍五入函数
2023-10-14 18:58:17