专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Delphi教程 » delphi:Delphi初学者应小心的 6大陷阱 »正文

delphi:Delphi初学者应小心的 6大陷阱

来源: 发布时间:星期五, 2008年12月26日 浏览:57次 评论:0
  初学DelphiI由于各种原因对DelphiI中许多概念不能很好理解并由此带来了许多问题或者是开发出稳性不好会能运行会又不能运行;或者是遇到个问题久思不得其解还误以为是DelphiI自身BUG等等这些浪费了我们大量时间、精力也影响了我们开发效率

  那么如何才能避免这些尽量少走弯路了?笔者从事DelphiI开发多年下面就把我经验整理总结介绍给大家希望帮助到初学DelphiI朋友

  问题:对类概念理解不到位开发中不能灵活运用请看下面:

  unit Unit1;

  erface

  uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, shellApi;

  type

  TForm1 = (TForm)

  Button1: TButton;

  private

  { Private declarations }

  public

  { Public declarations }

  end;

  var

  Form1: TForm1;

  implementation

  uses CommonUni;

  在DelphiI中新建然后添加个按钮就得到了下面这段这应该是大家相当熟悉可也就是这段让许多人在做开发很长时间后还不能很好理解 该可分为 3个个部分:第部分单元头(从起始位置到TYPE的前);第 2部分(从TYPE到END部分)定义了个从Tform继承过来窗体类它包含个Tbuttton类型成员最后部分(Var到结束部分)定义了个Tform1类型变量问题就出在这里了许多人误以为这最后段也是窗体类部分在该窗体类中经常写出这样代码Form1.caption = ’窗体标题’导致运行时得不到所要结果其实最后部分根本就属于窗体类定义它们不过是在同个UNIT中而已所以代码应该这样写:self.caption = ’窗体标题’;

  问题 2:将释放对象代码写在窗体CLOSE事件中导致Access Violation…

  个窗体关闭(CLOSE)和窗体析构(Destory)在系统处理上是有区别个窗体关闭时窗体实际上只是隐藏起来了它占用资源并未从内存中释放了我们还是可访问到窗体中数据;而当窗体响应DESTORY事件时窗体不仅仅是隐藏起来了而且占用系统资源也释放出来了因此如果个窗体关闭后我们还想访里面对象就应该将这些对象FREE代码写窗体(DESTORY)事件中

  问题 3:不加区别地使用String和String数据类型

  String类型和String类型是有区别在默认情况下(取决于$H开关)如果你将个变量定义为类型那么会被处理成个ANSIString类型这种类型是动态分配内存以NULL为结尾最大长度为4GString最大长度是不能超过255个由于ANSI是生存期自管理类型数据这意昧着这种类型数据需要更多系统开销所以在开发中String能满足要求就尽量使用它以提高运行速度

  问题 4:进行数据类型转换时处理不当最多就是型到数字/浮点型转换

  当将型数据转换为整型时我们经常这样写 I := StrToInt(aEdit.Text); 表面上看这没有任何问题使用格式写法都是正确可有种情况我们却没有考虑到如果用户在aEdit文本框中输入不是数字文本会如何样呢?还会成功吗?显然是不会系统肯定会弹出个英文让我们用户不知所措正确写法是:I := StrToIntDef(aEdit.Text, 0); 这样当转换不成功时第 2个参数就会赋给I类似还有strToInt64DefStrToFloatDef等等

  问题 5:单元引用问题使用那个定要引用所在单元

  比如在开发中我们要用到个APIExtractIconEx(从或是文件中获得个图标)那么就要在它USES中把单元shellApi加入进来否则是不能通过编译了类似情况还有很多我们常常使用帮助文档从中查找需要可当编译时却通不过为什么呢?就是没有在USES中引用所在单元这个问题初学者犯得最多应该加倍注意

  问题 6:避免循环引用尽可能通过第 3个单元实现如果确实不可避免应在区别位置进行引用所谓循环引用就是A单元引用了B单元而反过来B单元又引用了A单元产生循环我们还看上面erface下面有个USES语句而在implementation下面又有个USES语句循环如果确实不可避免那么就应该在将A单元中引用写在第个USES语句中而将B单元中引用写在第 2个USES语句中

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: