delphi中的record使用

delphi中的record使用

ID:15388052

大小:51.50 KB

页数:9页

时间:2018-08-03

delphi中的record使用_第1页
delphi中的record使用_第2页
delphi中的record使用_第3页
delphi中的record使用_第4页
delphi中的record使用_第5页
资源描述:

《delphi中的record使用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在Delphi中的Record类型中,与之C语言对应的即是结构体类型(struct),也可能是为了符合C语言或C++程序员的习惯,对于它在Delphi中的应用存在的一些问题进行初步的说明。在Delphi中的记录体类型有两种方式定义Type   RecTest=record(packed)     ID:integer;      Name:string;     Descript:string;   end;之两种类型的主要区别在于在内存中的存放,Packed是紧缩类型的,可以节省内存空间与存放的空间,但是它定义好了对应的长度,所以不太适合存放不定长的数据,如string类型的数据;同时在

2、使用记录体类型时特别要注意的是使用记录体数组的情况,使用不当不仅仅会出现性能方面的问题,同时也会产生意想不到的错误。如RecListarrary[0..100]ofRecTest,如采用这样的定义的方面,会产生的问题有:1.当用数组下标访问对应的记录体元素时,到后面的数据记录访问时间会越来越长,如RecList[89],它需要将RecTest中移动88个记录长度,由于RecTest是不定长的,所以每次移动的长度也可能不相同,所以导致定位数组中记录体时定位时间长2.当对记录体进行赋值时,如果想默认或遗忘给某个变量赋值,则会产生比较严重的后果,当应用到该变量时,可能会读取到错误的数值如一定要使

3、用记录体类型的,可以采用一些变通的方法,如采用数组指针,这样可以大幅提升性能,如针对前面的记录体数据情况,可以多定义一个指针变量,如下:PRecList=^RecTest    RecListarrary[0..100]ofPRecList这样定义相对的好处就是每次移动时,只需要移动记录指针的长度数即可,即在现有的windows系统中,只需要移动4位即可。所以针对上面的问题,在程序开发中尽量少采用记录体类型,直接定义一个相应的类即可,定义一个相应的类处理的好处时,可以与面对对象的开发的方法相一致,只不过是比记录体多了创建与释放而已,但相应的初始化或方法、属性在类中很容易实现,同时对于程序的

4、扩展类也很容易处理,记录体可能会比较麻烦,如在记录体中增加一个字段,那有可能整个程序都需要变化,但在对象中增加一个属性会显得非常方便,同时也容易对于对象中的属性内容进行初始化处理。另:在对不定长记录进行再分配空间时,如增加一个长度的空间,在系统中的处理是先开避一块内存地址保存当前内容再在此基础上加一个长度的地址长度,即在相应的内存中需要复制两个长度的地址后才能完成增加长度。补充1:1.首先了解到record是可以限制field的范围的,而且定义枚举类型的。typeTDateRec=recordYear:Integer;Month:(Jan,Feb,Mar,Apr,May,Jun,Jul,A

5、ug,Sep,Oct,Nov,Dec);Day:1..31;end;2.可以在不定义结构体的情况下,直接在变量声明时使用。varS:recordName:string;Age:Integer;end;3.下面是变体部分,这是Delphi中变体在结构中的标准定义typerecordTypeName=recordfieldList1:type1;...fieldListn:typen;casetag:ordinalTypeofconstantList1:(variant1);...constantListn:(variantn);end;ØTag可以省略ØconstantList的类型和ord

6、inalType的类型一致ØfieldList的类型不能是longstrings,dynamicarrays,variants,也不能是包含这些的结构体,但可以是指向这些类型的指针ØTag和constantLists在编译器处理这些字段时没有用,只是为程序员理解时提供方便(原文:TheoptionaltagandtheconstantListsplaynoroleinthewaythecompilermanagesthefields;theyarethereonlyfortheconvenienceoftheprogrammer.)Ø使用变体结构体的两个原因:一个是需要不同的数据,但是又不

7、会同时需要所有的字段。typeTEmployee=recordFirstName,LastName:string[40];BirthDate:TDate;caseSalaried:BooleanofTrue:(AnnualSalary:Currency);False:(HourlyWage:Currency);end;Ø另一个原因是可以把同样的数据就像是不同的类型的数据。比如,你有一个64位的实数做为第一个字段,你就可以

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。