转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Delphi代码标准文档         ★★★★

Delphi代码标准文档

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2373 更新时间:2009/4/23 18:26:42
l(SomeClass1);
  FreeAndNil(SomeClass2);
end;

(3). try...except的用法

  如果你希望在发生异常时执行一些任务,可以使用try...except。通常,没有必要为了简单地显示一个错误信息而使用try...except,因为Application对象能够自动根据上下文做到这一点。如果要在子句中激活默认的异常处理,可以再次触发异常。

(4). try...except...else的用法

  不鼓励使用带else子句的try...except,因为这将阻塞所有的异常,包括你没有准备处理的异常。

3.命名规范

3.1.过程(Procedure)与函数(Function)

1).命名

  过程与函数名应当有意义。进行一个动作的过程最好在名称前加上表示动作的动词为前缀。例如:

procedure FormatHardDrive;

  设置输入参数值的过程名应当以Set 为其前缀,例如:

procedure SetUserName;

  获取数值的过程名应当以Get 为其前缀,例如:

function GetUserName:string;

2).形参

  所有形参的名称都应当表达出它的用途。如果合适的话,形参的名称最好以字母a 为前缀,例如:

procedure SomeProc(aUserName:string; aUserAge:integer);

  当参数名与类的特性或字段同名时,前缀a 就有必要了。

3).命名冲突

  当两个单元中含有相同名称的过程时,如果调用该过程,实际被调用的是Uses 子句中较后出现的那个单元中的过程。为避免这种情况,可在方法名前加想要的单元名,例如:

SysUtils.FindClose(SR);

或Windows.FindClose(Handle);

3.2.变量(Variable)

  变量的名称应当能够表达出它的用途。循环控制变量常常为单个字母,诸如I 、J 或K 。也可以使用更有意义的名称,例如UserIndex。布尔变量名必须能清楚表示出True 和False 值的意义。

1). 局部变量

  局部变量遵循其他变量的命名规则。

2). 全局变量

  全局变量以大写字母“G”打头,并遵循其他变量的命名规则。

3.3.类型(Type)

3.3.1.一般类型

1). 枚举型

  枚举类型名必须代表枚举的用途。名称前要加T字符作为前缀,表示这是个数据类型。枚举类型的标识符列表的前缀应包含2 - 3 个小写字符,来彼此关联。例如:

TSongType=(stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);

  枚举类型的变量实例的名称与类型相同,但没有前缀T ,也可以给变量一个更加特殊名称,诸如:FavoriteSongTypel、FavoriteSongType2等等。

3.3.2.构造类型

1). 数组类型

  数组类型名应表达出该数组的用途。类型名必须加字母“T”为前缀。如果要声明一个指向数组类型的指针,则必须加字母P 为前缀,且声明在类型声明之前。例如:

type
  PCycleArray = ^TCycleArray;
  TCycleArray=array[1..100] of integer;

实际上,数组类型的变量实例与类型名称相同,但没有“T”前缀。

2). 记录类型

  记录类型名应表达出记录的用途。类型名必须加字母T为前缀。如果要声明一个指向记录类型的指计,则必须加字母P为前缀,且其声明在类型声明之前。例如:

type
  PEmployee = ^TEmployee;
  TEmployee = record
    EmployeeName: string;
    EmployeeRate: Double;
  end;

3.3.3.类类型(Class)

1). 命名与格式

  类的名称应当表达出类的用途。一般的类名前要加字母“T”,如果是接口类那么类名前要加“I”,错误异常类的类名前要加“E”,而类引用类型(Class-reference type)则要在类名后加“Class”,抽象类一般是在类名前还要加“Custom”。例如:

type
  TCustomCipher = class(TObject);
  TCipher = class(TCustomCipher);
  ICipher = interface;
  TCipherClass = class of TCustomer
  ECipherException = class(Exception);

  类的实例名称通常与类名相同,只不过没有前缀“T”。

var
  Customer: TCustomer;

注意:关于元件的命名,请参阅“元件类型”。

2).字段

(1) 命名与格式

  字段的命名遵循与变量相同的规则,只不过要加前缀F ,表示这是字段。

(2) 可见性

  所有字段必须为私有。如果要在类的作用域之外访问字段,可借助于类的属性来实现。

3).方法

(1) 命名与格式

  方法的命名遵循与过程和函数相同的规则。

(2) 静态方法

  当你不希望一个方法被派生类覆盖时,应当使用静态方法。

(3) 虚拟方法(virtual)与动态方法(dynamic)

  当你希望一个方法能被派生类覆盖,应当使用虚拟方法(virtual)。如果类的方法要被多个派生类直接或间接地使用,则应当用动态方法(dynamic)。例如,某一个类含有一个被频繁覆盖的方法,并有100个派生类,则应将方法定义为动态的,这样可以减少内存的开销。

(4) 抽象方法(abstract)

  如果一个类要创建实例,则不要使用抽象方法。抽象方法只能在那些从不创建实例的基类中使用。

(5) 属性访问方法

  所有属性访问方法应当定义在类的私有或保护部分。属性访问方法遵循与过程和函数相同的规则。用于读的方法应当加“Get”前缀,用于写的方法应当加“Set”前缀,并且有一个叫Value的参数,其类型与属性的类型相同。例如:

TSomeClass = class(TObject)
private
FSomeField: Integer;
protected
function GetSomeField: Integer;
procedure SetSomeField(Value: Integer);
public
property
SomeField: Integer read GetSomeField write SetSomeField;
end;

  尽管不是必须,但还是建议你使用写访问方法来访问代表私有字段属性。

4).属性

  属性作为私有字段的访问器,遵循与字段相同的命名规则,只不过没有F前缀。属性名应为名词,而不是动词。属性是数据,而方法是动作。数组属性名应当是复数,而一般的属性应当是单数。

3.3.4.元件类型

1). 元件类型的命名标准

  元件的命名与类的命名类似,只不过当它与其它元件名称冲突时,你可以加上3个字符的前缀,用以标识公司、个人或其他实体。例如,一个时钟元件可以这样声明:

TddgClock = class(TComponent)

注意,作为前缀的3 个字符要小写。

2). 元件实例的命名规则

  元件实例的名称应当能够描述其实际意义,这里命名规则使用了一个变更的匈牙利前缀命名规范。使用前缀而不使用后缀的原因是在搜寻时,在对象检查器和代码探索器中搜寻构件的名字比搜寻构件的类型更容易。在这个标准中,元件实例名包括两个部分:前缀和性质标识名。

(1). 元件的前缀

  元件的前缀多是表现元件类型的字母缩写。参见下面表中的元件前缀:

元件类名元件前缀TActionList, TAction表示动作的列表项actTButton, TSpeedButton, TBitBtn等所有的按钮类btnTCheckBox, TDBCheckBox等所有的检查框chkTRadioButton单选按钮类rdoTToolBar工具条tbTMainMenu所有的主菜单类mmTMainMenuItem所有的菜单项类miTPopupMenu所有的弹出式菜单类pmTPopupMenuItem所有的弹出式菜单项类pmiTLabel, TStaticText等所有用来显示的标签类lblTPanel等所有的面板类pnlTPageControl等所有的页式控件类pgcTEdit, TMaskEdit等所有的单行编辑框类edtTMemo, TRichEdit等所有的多行编辑框类mmoTDrawGrid, TStringGrid等所有的网格类grdTAnimate等所有的动画类aniTImageList等所有的图片列表类ilTImage等图片类imgTChart图表类chtTComboBox, TDBComboBox等所有的下拉式列表框类cboTListBox, TDBList等所有的列表框类lstTTreeViewtvTListViewlvTHotKeyhkTSplitter等所有的分隔符类sptTOpenDialog等所有的对话框元件类dlgTTable等所有的数据表类tblTQuery等所有的SQL查询类元件qryTClientDataSet所有的客户数据集元件cdsTDataSourcedsTDatabasedbTSockConnection,TDCOMConnection等连接元件类conTQuickRep, TFastReport等所有的报表元件类rptTDDEClientConv,TDDEClientItem等所有的DDE元件类ddeTMonthCalendar等所有的日历类calTGroupBox等控件类grp

  如上所示,元件类型前缀是从分析描述元件的类型性质而来的。通常情况下,下面的规则描述如何定义一个元件类型前缀:

  • 从元件类型名中移去T前缀。例如TButton变成Button。
  • 除了第一个元音,删去所有元音字母。例如,Button变成bttn,Edit变成edt。
  • 压缩双字母。例如,bttn变成btn。
  • 如发生冲突,则在某一元件前缀中加入一个元音。例如在TBatton元件的前缀中加入元音变为batn,以区别TButton的前缀。
  • 不过,上述规则首先得保证前缀名称必须符合习惯,做到见名知意,如:TDDEClientConv控件的前缀就是一个例外。

注意:元件的前缀是为了表示出元件的类型,是按钮,还是标签等等,因此没有必要为每一个特别元件类建立一个元件前缀,如: TMyButton的元件前缀仍为btn。

(2). 元件性质标识名

  元件性质标识名是元件意图的描述。例如,一个用于关闭窗体的TButton元件实例可命名为btnClose。一个编辑姓名的元件实例可命名为edtName。

3.3.5.窗体与对话框类型

1). 窗体类型的命名标准

  窗体或对话框类型的名称应当表达出窗体的用途,如果是窗体要加“Tfrm”前缀,如果是对话框要加“Tdlg”,后跟描述性名。例如,About窗体类型名称为:

TfrmAbout = class(TForm)

主窗体的类型名称为:

TfrmMain = class(TForm)

客户登录窗体的类型名称为:

TfrmCustomerEntry = class(TForm)

登陆对话框的类型名称为:

TdlgLogin = class(TForm)

2). 窗体实例的命名标准

  窗体实例的名称与相应的类型名称相同,但没有前缀T 。例如,前面提到的窗体类型与实例的名称为:

类型名实例名TfrmAboutfrmAboutTfrmMainfrmMainTfrmCustomerEntryfrmCustomerEntryTdlgLogindlgLogin

3). 自动创建的窗体

  除非特别原因,只有主窗体才自动生成。其他所有窗体必须从Project Options对话框的自动生成列表中删除。更进一步信息,请参阅后面几节。

4). 模式窗体实例化函数

  所有窗体单元都应当含有实例化函数,用于创建、设置、模式显示和释放窗体。这个函数将返回由窗体返回的模式结果。传递给这个函数的参数遵循参数传递的规则。之所以要这样封装,是为了便于代码的重用和维护。

  窗体的变量应当从单元中移走,改在窗体实例化函数中作为局部变量定义(注意,要求从Project Options对话框的自动生成列表中移走该窗体。请看前面的内容。

例如,下面的单元文件演示了GetUserData的实例化函数。

Unit UserDataFrm;

Interface

Uses
 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

Type

  TfrmUserData = class(TForm)
    edtUserName: TEdit;
    edtUserID: TEdit;
  private
 
{ Private declarations }
  public
 
{ Public declarations }
  end;

function GetUserData(var aUserName: String;var aUserID: Integer): Word;

implementation

{$R *.DFM}

function GetUserData(var aUserName: String;var aUserID: Integer): Word;
var
 
frmUserData: TfrmUserData;
begin
 
frmUserData := TfrmUserData.Create(Application);
  frmUserData.Caption:=''''Getting User Data'''' ;
  Result : = frmUserData.ShowModal;
  if Result=mrOK then
  begin
   
aUserName := frmUserData.edtUserName.Text;
    aUserID := StrToInt(frmUserData.edtUserID.Text);
  end;
  finally
   
frmUserData.Free;
  end;
end;

End.

5).窗体框架与复合窗体

  如果一个窗体结构过于复杂,就必须将其分化成为一个主窗体框架以及嵌入到主窗体框架的若干子窗体框架。如:

TfrmMainFrame: TfrmInfoFrame,TfrmEditorFrame

  使用窗体框架,主要是为了解决界面和代码复用问题,以及提高单元代码的内聚力(划分后,每一个窗体框架为一个独立单元),从而提高软件工程质量。你必须提炼出界面关联代码(可复用的)和应用关联代码(不能复用的)。

3.3.6.数据模块类型

1). 数据模块的命名标准

  数据模块类型名称应表达出它的用途,且要加前缀“Tdm”,后跟描述性名称。例如,Customer数据模块的类型名称为:

TdmCustomer = class(TDataModule)

Orders 数据模块的类型名称为:

TdmOrder = class(TDataModule)

2). 数据模块实例的命名标准

  数据模块实例的名称应当与相应的类型名称相同,但没有前缀T 。例如,前面的数据模块类型、实例名称如下:

类型名称实例名TdmCustomerdmCustomerTdmOrderdmOrder

3.4.文件

  建议在所有源文件、项目文件和单元文件使用结构化的文件头信息。一个文件头至少应包含以下信息:

{
Copyright @ Year by Authors
}

  详细说明,请参阅:单元文件注释文档格式。

3.4.1.项目文件

  项目文件的名称应当具有描述意义。例如,“The Delphi 5 Developer’s Guide Bug Manager ”的项目名称为DDGBugs.dpr,一个系统信息程序的名称为SysInfo.dpr。

3.4.2.窗体文件

  窗体文件的名称应当表达出窗体的用途,且具有Frm后缀。例如,About窗体的文件名叫AboutFrm.dfm,主窗体的文件名叫MainFrm.dfm。

3.4.3.数据模块文件

  数据模块文件的名称应当表达出数据模块的作用,且具有DM后缀。例如,Customers数据模块的文件名叫CustomersDM.dfm。

3.4.4.远程数据模

上一页  [1] [2] [3]  下一页


[Delphi程序]delphi代码标准文档(  

教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台