ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:23.16KB ,
资源ID:11396491      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11396491.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Delphi命名规范.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Delphi命名规范.docx

1、Delphi命名规范目录版本记录 1文档信息 1修订历史记录 11、前言 32、命名规范 32.1、过程(Procedure)与函数(Function) 32.1.1、命名 32.1.2、形参 32.1.3、命名冲突 42.2、常量(Constants)和变量(Variable) 42.2.1、常量 42.2.2、变量 42.3、类型(Type) 62.3.1、一般类型 62.3.2、构造类型 62.3.3、类类型(Class) 72.3.4、元件类型 92.3.5、窗体与对话框类型 112.3.6、数据模块类型 142.4、文件 152.4.1、项目文件(.dpr) 152.4.2、窗体文件

2、(.dfm) 152.4.3、数据模块文件 152.4.4、远程数据模块文件 152.4.5、单元文件(.pas) 162.4.6、包文件(.dpk) 181、前言本文档主要是为Delphi开发人员提供一个源代码书写标准,以及程序和文件的命名标准,使他们在编程时有一致格式可遵循。这样,每个编程人员编写的代码能够被其他人理解。2、命名规范2.1、过程(Procedure)与函数(Function)2.1.1、命名过程与函数名应当有意义。进行一个动作的过程最好在名称前加上表示动作的动词为前缀。例如:procedure FormatHardDrive;设置输入参数值的过程名应当以Set 为其前缀,例

3、如:procedure SetUserName;获取数值的过程名应当以Get 为其前缀,例如:function GetUserName:string;2.1.2、形参所有形参的名称都应当表达出它的用途。如果合适的话,形参的名称最好以字母a 为前缀,例如:procedure SomeProc(aUserName:string; aUserAge:integer);当参数名与类的特性或字段同名时,前缀a 就有必要了。2.1.3、命名冲突当两个单元中含有相同名称的过程时,如果调用该过程,实际被调用的是Uses 子句中较后出现的那个单元中的过程。为避免这种情况,可在方法名前加想要的单元名,例如:Sys

4、Utils.FindClose(SR);或 Windows.FindClose(Handle);2.2、常量(Constants)和变量(Variable)2.2.1、常量 常量的名称应当能够表达出它的用途,一般以类型名开头,示范: I_Sex_Male = 0; /用 0 来表示男 S_Sex_Male = 男; I_Sex_Female = 1; /用 1 来表示女 S_Sex_Femal = 女;2.2.2、变量变量的名称应当能够表达出它的用途。 2.2.2.1、局部变量 (1)、规则1:v前缀当变量对应数据库字段值时,应在变量名前加小写的 v 来做前缀。比如:姓名字段,字段名为 Nam

5、e,年龄字段,字段名为 Age采用规则1时定义为:vName: string; vAge: Integer;(2)、规则2:类型变量一般情况下,命名变量名时,应用变量类型的缩写作为命名的前缀加上变量有一定的含义的字符串组成整个变量的名称:字符串类型变量采用 Str 前缀加上变量名,如:StrSql、StrFile、StrName、StrTemp;数值型的用I作为前缀加上变量名,如:ICount;浮点型的用F作为前缀加上变量名,如:FNumber;布尔变量名用B作为前缀,并需要能清楚表示出True 和False 值的意义,如:BNeedUpdate;其他类型采用相应类型首字母作为前缀,如有重复则

6、采用前3位作为前缀,并且首字母大写。(3)、规则3:循环控制变量当循环控制变量较少且不存在嵌套循环时,为了时循环代码比较简洁,通常使用单个小写字母,诸如i,j,k;当循环变量比较多时单个字母作为循环控制变量容易使循环控制混淆,降低代码可读性,这时应该用具有实际意义的名称,并采用规则2的写法,例如IUserIndex等。2.2.2.2、 全局变量全局变量一般以小写的g为前缀,并遵循其他变量的命名规则,不鼓励使用全局变量,如果使用要使用全局变量时,全局变量的数量不能超过10个。2.3、类型(Type)2.3.1、一般类型(1)、枚举型枚举类型名必须代表枚举的用途。名称前要加T字符作为前缀,表示这是

7、个数据类型。枚举类型的标识符列表的前缀应包含2 - 3 个小写字符,来彼此关联。例如:TSongType=(stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);枚举类型的变量实例的名称与类型相同,但没有前缀T ,也可以给变量一个更加特殊名称,诸如:FavoriteSongTypel、FavoriteSongType2等等。2.3.2、构造类型2.3.2.1、数组类型数组类型名应表达出该数组的用途。类型名必须加字母“T”为前缀。如果要声明一个指向数组类型的指针,则必须加字母P 为前缀,且声明在类型声明之前。例如:t

8、ype PCycleArray = TCycleArray; TCycleArray = array1.100 of integer;实际上,数组类型的变量实例与类型名称相同,但没有“T”前缀。2.3.2.1、记录类型记录类型名应表达出记录的用途。类型名必须加字母T为前缀。如果要声明一个指向记录类型的指计,则必须加字母P为前缀,且其声明在类型声明之前。例如:type PEmployee = TEmployee; TEmployee = record EmployeeName: string; EmployeeRate: Double; end;2.3.3、类类型(Class)2.3.3.1、命

9、名与格式类的名称应当表达出类的用途。一般的类名前要加字母“T”,如果是接口类那么类名前要加“I”,错误异常类的类名前要加“E”,而类引用类型(Class-reference type)则要在类名后加“Class”,抽象类一般是在类名前还要加“Custom”。例如:type TCustomCipher = class(TObject); TCipher = class(TCustomCipher); ICipher = interface; TCipherClass = class of TCustomer ECipherException = class(Exception);类的实例名称通常

10、与类名相同,只不过没有前缀“T”。var Customer: TCustomer;注意:关于元件的命名,请参阅“元件类型”。2.3.3.2、字段(1) 命名与格式字段的名称应当能够表达出它的用途,并且要加前缀F ,表示这是字段。(2) 可见性所有字段必须为私有。如果要在类的作用域之外访问字段,可借助于类的属性来实现。2.3.3.3、方法(1) 命名与格式方法的命名遵循与过程和函数相同的规则。(2) 静态方法当你不希望一个方法被派生类覆盖时,应当使用静态方法。(3) 虚拟方法(virtual)与动态方法(dynamic)当你希望一个方法能被派生类覆盖,应当使用虚拟方法(virtual)。如果类的

11、方法要被多个派生类直接或间接地使用,则应当用动态方法(dynamic)。例如,某一个类含有一个被频繁覆盖的方法,并有100个派生类,则应将方法定义为动态的,这样可以减少内存的开销。(4) 抽象方法(abstract)如果一个类要创建实例,则不要使用抽象方法。抽象方法只能在那些从不创建实例的基类中使用。(5) 属性访问方法所有属性访问方法应当定义在类的私有或保护部分。属性访问方法遵循与过程和函数相同的规则。用于读的方法应当加“Get”前缀,用于写的方法应当加“Set”前缀,并且有一个叫Value的参数,其类型与属性的类型相同。例如:TSomeClass = class(TObject) priv

12、ate FSomeField: Integer; protected function GetSomeField: Integer; procedure SetSomeField(Value: Integer); public propertySomeField: Integer readGetSomeField write SetSomeField; end;尽管不是必须,但还是建议你使用写访问方法来访问代表私有字段属性。2.3.3.4、属性属性作为私有字段的访问器,遵循与字段相同的命名规则,只不过没有F前缀。属性名应为名词,而不是动词。属性是数据,而方法是动作。数组属性名应当是复数,而一般

13、的属性应当是单数。2.3.4、元件类型2.3.4.1、元件类型的命名标准元件的命名与类的命名类似,只不过当它与其它元件名称冲突时,你可以加上3个字符的前缀,用以标识公司、个人或其他实体。例如,一个时钟元件可以这样声明:TddgClock = class(TComponent)注意,作为前缀的3 个字符要小写。2.3.4.2、元件实例的命名规则元件实例的名称应当能够描述其实际意义,这里命名规则使用了一个变更的匈牙利前缀命名规范。使用前缀而不使用后缀的原因是在搜寻时,在对象检查器和代码探索器中搜寻构件的名字比搜寻构件的类型更容易。在这个标准中,元件实例名包括两个部分:前缀和性质标识名。(1). 元

14、件的前缀元件的前缀多是表现元件类型的字母缩写。参见下面表中的元件前缀:元件类名元件前缀TActionList, TAction表示动作的列表项actTButton按钮类btnTBitBtn 按钮类btn、bbtnTSpeedButton 按钮类sbTCheckBox, TDBCheckBox等所有的检查框chk、cbTRadioButton单选按钮类rdo、rbTToolBar工具条tbTMainMenu所有的主菜单类mmTMainMenuItem所有的菜单项类miTPopupMenu所有的弹出式菜单类pmTPopupMenuItem所有的弹出式菜单项类pmiTLabel, TStaticTe

15、xt等所有用来显示的标签类lbl、lbTPanel等所有的面板类pnl、pTPageControl等所有的页式控件类pgc、pcTEdit, TMaskEdit等所有的单行编辑框类edtTMemo, TRichEdit等所有的多行编辑框类mmo、mmTDrawGrid, TStringGrid等所有的网格类grd、gTAnimate等所有的动画类aniTImageList等所有的图片列表类ilTImage等图片类imgTChart图表类chtTComboBox, TDBComboBox等所有的下拉式列表框类cbo、cbbTListBox, TDBList等所有的列表框类lst、lbTTreeV

16、iewtvTListViewlvTHotKeyhkTSplitter等所有的分隔符类sptTOpenDialog等所有的对话框元件类dlgTTable等所有的数据表类tblTQuery、TAdoQuery等所有的SQL查询类元件qry、QryTClientDataSet所有的客户数据集元件cdsTDataSourcedsTDatabasedbTSockConnection,TDCOMConnection等连接元件类conTQuickRep, TFastReport等所有的报表元件类rptTDDEClientConv,TDDEClientItem等所有的DDE元件类ddeTMonthCalend

17、ar等所有的日历类calTDateTimePicker类控件dTGroupBox等控件类grp、gbTForm窗体类FrmTFrame类Fram(2). 元件性质标识名元件性质标识名是元件意图的描述。例如,一个用于关闭窗体的TButton元件实例可命名为btnClose。一个编辑姓名的元件实例可命名为edtName。2.3.5、窗体与对话框类型2.3.5.1、窗体类型的命名标准窗体或对话框类型的名称应当表达出窗体的用途,如果是窗体要加“TFrm”前缀,后跟描述性名。例如,About窗体类型名称为:TFrmAbout = class(TForm)主窗体的类型名称为:TFrmMain = clas

18、s(TForm)客户登录窗体的类型名称为:TFrmCustomerEntry = class(TForm)登陆对话框的类型名称为:TFrmLogin = class(TForm)2.3.5.2、窗体实例的命名标准窗体实例的名称与相应的类型名称相同,但没有前缀T 。使用前缀法命名窗体和对话框的好处在于可以在Object Inspector(属性观察器)中快速找到需要的元件类型。例如,前面提到的窗体类型与实例的名称为:类型名(窗口名)实例名对应的源文件名TFmAboutFmAboutuFrmAbout.pasTFrmMainFrmMainuFrmMain.pasTFrmCustomerEntryF

19、rmCustomerEntryuFrmCustomerEntry.pasTFrmLoginFrmLoginuFrmLogin.pas2.3.5.3、自动创建的窗体除非特别原因,只有主窗体才自动生成。其他所有窗体必须从Project Options对话框的自动生成列表中删除。更进一步信息,请参阅后面几节。2.3.5.4、模式窗体实例化函数所有窗体单元都应当含有实例化函数,用于创建、设置、模式显示和释放窗体。这个函数将返回由窗体返回的模式结果。传递给这个函数的参数遵循参数传递的规则。之所以要这样封装,是为了便于代码的重用和维护。窗体的变量应当从单元中移走,改在窗体实例化函数中作为局部变量定义(注意

20、,要求从Project Options对话框的自动生成列表中移走该窗体。请看前面的内容。例如,下面的单元文件演示了GetUserData的实例化函数。Unit uFrmUserData; /文件名命名InterfaceUses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;Type TFrmUserData = class(TForm) /窗口名命名 edtUserName: TEdit; edtUserID: TEdit; private Private declarati

21、ons public Public declarations end;function GetUserData(var aUserName: String;var aUserID: Integer): Word;implementation$R *.DFMfunction GetUserData(var aUserName: String;var aUserID: Integer): Word;var FrmUserData: TFrmUserData; /窗口变量名begin FrmUserData := TFrmUserData.Create(Application); try FrmUs

22、erData.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.2.3.5.5、窗体框架与复合窗体如果一个窗体结构过于复杂,就必须将其分化成为一个主窗体框架以及嵌入到主窗体框架的若干子窗体框架。使用

23、窗体框架,主要是为了解决界面和代码复用问题,以及提高单元代码的内聚力(划分后,每一个窗体框架为一个独立单元),从而提高软件工程质量。你必须提炼出界面关联代码(可复用的)和应用关联代码(不能复用的)。TFrame类的命名方法和TForm类似。框架窗体类名(TFrame)实例名对应的源文件名TFamAboutFramAboutuFramAbout.pasTFramCustomerEntryFramCustomerEntryuFramCustomerEntry.pasTFramLoginFramLoginuFramLogin.pas2.3.6、数据模块类型2.3.6.1、数据模块的命名标准数据模块类

24、型名称应表达出它的用途,且要加前缀“Tdm”,后跟描述性名称。例如,Customer数据模块的类型名称为:TdmCustomer = class(TDataModule)Orders 数据模块的类型名称为:TdmOrder = class(TDataModule)2.3.6.2、数据模块实例的命名标准数据模块实例的名称应当与相应的类型名称相同,但没有前缀T 。例如,前面的数据模块类型、实例名称如下:类型名称实例名对应源文件名TdmCustomerdmCustomerudmCustomer.pasTdmOrderdmOrderudmOrder.pas2.4、文件2.4.1、项目文件(.dpr)项

25、目文件的名称应当具有描述意义。例如,“The Delphi 5 Developers Guide Bug Manager ”的项目名称为DDGBugs.dpr,一个系统信息程序的名称为SysInfo.dpr。2.4.2、窗体文件(.dfm)窗体文件的名称应该和窗体类名保持一致,只不过,把窗体的类型名改成小写的u就行了。例如,About窗体的文件名叫uFrmAbout.dfm,单元名为uFrmAbout.pas。主窗体的窗体文件名叫uFrmMain.dfm,单元名为uFrmMain.pas。2.4.3、数据模块文件数据模块文件的命名规则和窗体文件的命名规则一致,例如,Customers数据模块的

26、文件名叫udmCustomers.dfm,单元名为udmCustomers.pas。2.4.4、远程数据模块文件远程数据模块文件的名称的命名规则和窗体文件命名规则一致。例如,Customers远程数据模块的文件叫urdmCustomers.dfm,单元名为urdmCustomers.pas。2.4.5、单元文件(.pas)2.4.5.1、普通单元(1) 单元名单元的名称应当有描述性。例如,应用程序的主窗体单元叫uFrmMaim.pas。(2) Uses 子句Interface部分的Uses子句应当只包含该部分需要的单元。不要包含可能由Delphi自动添加的单元名。Implementation部

27、分的Uses子句应当只包含该部分需要的单元,不要有多余的单元。(3) Interface 部分Interface部分应当只包含需要被外部单元访问的类型、变量、过程与函数的声明。而且,这些声明应当在Implementation部分之前。(4) Implementation 部分Implementation部分包括本单元私有的类型、变量、过程与函数的实现。(5) Initialization 部分不要在Initialization部分放置花费时间很多的代码。否则,将导致应用程序启动时显得很慢。(6) Finalization 部分确保释放所有在Initialization部分中分配的资源。2.4.

28、5.2、窗体单元窗体单元文件的名称与相应的窗体名称相同,窗体单元和窗体文件只是后缀名不通。例如,About窗体的单元名称叫uFrmAbout.pas。主窗体的单元文件名称叫uFrmMain.pas。2.4.5.3、数据模块单元数据模块单元文件的名称与相应的数据模块名称相同,数据模块单元和数据模块文件只是后缀名不通。例如,数据模块单元的名称叫udmCustomers.pas。2.4.5.4、通用单元通用单元是用于存放函数库,一般类型,或常量而非元件的单元。通用单元的名称应当表达出它的用途,名称前要加“u”前缀。例如,一个实用调试工具单元的名称叫uDebugUtilities.pas,包含全局变量

29、的单元名称叫uCustomerGlobals.pas。注意,一个项目中单元名称必须是唯一的。通用单元名不能重名。2.4.5.5、元件单元(1). 命名元件单元应放在单独的路径中,以表明它们是定义元件的单元。它们一般与项目不放在同一路径下。单元文件名称应表达出其内容。注意,有关元件命名标准的更多信息,请参阅“元件类型的命名标准”。 元件单元只能含有一个主要元件,这是指出现在元件选项板上的元件。其他辅助性的元件或对象也可以包含在同一单元中。(2). 注册单元元件的注册过程应当从元件单元中移走,放在一个单独的单元中。这个注册单元用于注册所有元件、属性编辑器、元件编辑器、向导等。元件注册应当在设计期包

30、中进行。因此,注册单元应当包含在设计期包而不是运行期包中。建议注册单元这样命名:xxxReg.pas其中,xxx字符前缀,以标识元件包名称或公司、个人、其他实体。例如,注册单元命名为xxxReg.pas。2.4.6、包文件(.dpk)2.4.6.1、运行期包与设计期包运行期包中应当只包含所需要的单元。那些属性编辑器和元件编辑器的单元应当放在设计期包中。注册单元也应当放在设计期包中。2.4.6.2、文件命名标准(1)、与控件开发相关的包命名名遵循下列模式:dcliiiDescvvCn.pkg 设计期包iiiDescvvCn.pkg 运行期包 其中,iii代表一个2-3字符的前缀,用于标识公司、个人或其他需要标识的事情,也可不要;Desc表示该控件包的简短描述;vv代表包的版本号,你可以根据需要取舍;前缀“dcl”表示设计期包,没有该前缀表示运行期包;字母“Cn”表示编译器类型与编译器版本号,如:Delphi5=D5, Delphi7=D7.。注意包名称中的lib或std分别表示这是设计期包还是运行期包。例如:dclrbStd

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2