📄 delphi 程序员代码编写标准指南.htm
字号:
可视化<BR><BR><BR><BR>所有的域都必需是私有的。想在类的范围之外存取域得通过属性来使用。<BR><BR><BR><BR>3.8.3
方法<BR><BR><BR><BR>3.8.3.1
命名/格式<BR><BR><BR><BR>方法的命名应遵循本文档中有关过程和函数的约定叙述。<BR><BR><BR><BR>3.8.3.2
使用静态的方法<BR><BR><BR><BR>如果使用一个静态的方法,那么该方法就不能被该类的后代类所继承。<BR><BR><BR><BR>3.8.3.3
使用虚拟/动态的方法<BR><BR><BR><BR>如果你打算该类的方法能被后代的类所继承就得使用虚拟的方法。只有在该方法有多个继承时(直接的或间接的)才使用动态的方法。例如,一个类类型包含一个可继承的方法,而100个后代类要继承这种方法,那么这个方法就会动态地产生为100个后代类使用的内存。<BR><BR><BR><BR>3.8.3.4
使用抽象的方法<BR><BR><BR><BR>如果在一个类中使用抽象的方法,该类就不能被创建。只有在那些永远不会被创建的类中使用抽象的方法。<BR><BR><BR><BR>3.8.3.5
属性存取方法<BR><BR><BR><BR>所有存取类的方法都只能出现在类的private或protected部分。属性存取方法的命名应遵循过程和函数的约定规则。读取存取方法(方法读取器)必需以单词Get为前缀。写入存取方法(方法写入器)必需以单词Set为前缀。方法写入器的参数的名字应为Value,并且它的类型应是它所操作的属性的类型。例如:<BR><BR>TSomeClass
= class(TObject)<BR><BR>private<BR><BR> FsomeField :
Integer;<BR><BR>protected<BR><BR> function GetSomeField :
Integer;<BR><BR> procedure SetSomeField(Value :
Integer);<BR><BR>public<BR><BR> property SomeField : Integer read
GetSomeField write SetSomeField;<BR><BR>end;<BR><BR><BR><BR>3.8.4
属性<BR><BR><BR><BR>3.8.4.1
命名/格式<BR><BR><BR><BR>属性如果是表示为一个私有域的存取器的话,那么它的名字应是它们所操作的域的名字除去解释符F。<BR><BR><BR><BR>属性的名字应是名词,不是动词。属性表示的是数据,而方法表示的是行为。<BR><BR><BR><BR>数组类型的名称应为复数。一般情况下属性的名称应为单数。<BR><BR><BR><BR>3.8.4.2
使用存取的方法<BR><BR><BR><BR>尽管没有要求,但还是建议尽量少地为一个表示私有域的属性而使用写入存取方法。<BR><BR>四、文件<BR><BR><BR><BR>4.1
工程文件<BR><BR><BR><BR>4.1.1 命名<BR><BR><BR><BR>工程文件应取个描述性的名字。例如,Delphi
4开发者指南错误管理器 的工程名字是:DDGBugs.dpr。一个有关系统信息的程序的名字就应象
SysInfo.dpr。<BR><BR><BR><BR>4.2 窗体文件<BR><BR><BR><BR>4.2.1
命名<BR><BR><BR><BR>一个窗体文件的取名应可以描述使用该窗体的目的,并加以后缀Frm。例如,一个“关于”的窗体的文件名应是AboutFrm.dpr。主窗体的文件名应是MainFrm.dpr。<BR><BR><BR><BR>4.3
数据模板文件<BR><BR><BR><BR>4.3.1
命名<BR><BR><BR><BR>数据模板的取名应能表示使用该数据模板的目的,它的名称应加以两个字符的后缀DM。例如,自定义数据模板的文件名字应为CustomersDM.dfm。<BR><BR><BR><BR>4.4
远端数据模板文件<BR><BR><BR><BR>4.4.1
命名<BR><BR><BR><BR>远端数据模板的取名应能表示使用该远端数据模板的目的,它的名称应加以三个字符的后缀RDM。例如,自定义远端数据模板的文件名字应为CustomersRDM.dfm。</FONT>
<BR>
<P><FONT style="FONT-SIZE: 11pt; LINE-HEIGHT: 16pt"><BR><BR><BR>4.5
Unit文件<BR><BR><BR><BR>4.5.1 通用Unit结构<BR><BR><BR><BR>4.5.1.1
unit的名字<BR><BR><BR><BR>Unit文件应取一个可描述性的名字。例如,包含应用程序主窗体的单元应叫做MainFrm.pas。<BR><BR><BR><BR>4.5.1.2
uses子句<BR><BR><BR><BR>在interface部分的uses子句应包含在interface部分中的代码所需要的单元。去掉那些Delphi可以自动加入到程序中的单元。<BR><BR><BR><BR>在implementation部分的uses子句应只包含在implementation部分中的代码所需要的单元的名字。去掉不必要的单元。<BR><BR><BR><BR>4.5.1.3
interface部分<BR><BR><BR><BR>interface部分应包含只那些其它单元所需要存取类型的定义、变量、过程/函数的预定义等等。否则,就应放在implementation部分定义。<BR><BR><BR><BR>4.5.1.4
implementation部分<BR><BR><BR><BR>implementation部分应包含那些只在本单元中私用的类型定义、变量、过程/函数定义等等。<BR><BR><BR><BR>4.5.1.5
initialization部分<BR><BR><BR><BR>不要在initialization
部分放入耗时长的代码,这将使程序的第一个界面出现<BR><BR>得比较缓慢。<BR><BR><BR><BR>4.5.1.6
finalization部分<BR><BR><BR><BR>在这里要保证释放你在Initialization部分所分配的任何资源。<BR><BR><BR><BR>4.5.2
窗体单元<BR><BR><BR><BR>4.5.2.1
命名<BR><BR><BR><BR>一个窗体的单元文件应拥有与它所对应的窗体文件同样的名称。例如,“关于”窗体的单元名称应为
AboutFrm.pas,而主窗体的单元名称应为MainFrm.pas。<BR><BR><BR><BR>4.5.3
数据模板单元<BR><BR><BR><BR>4.5.3.1
命名<BR><BR><BR><BR>一个数据模板的单元文件应拥有与它所对应的数据模板文件同样的名称。例如,一个自定义数据模板单元的名称应为CustomersDM.pas。<BR><BR><BR><BR>4.5.4
一般目的单元<BR><BR><BR><BR>4.5.4.1
命名<BR><BR><BR><BR>一般目的单元的取名应符合使用该单元的目的。例如,一个实用程序单元取名为BugUtilities.pas。一个包含全局变量的单元取名为CustomerGlobals.pas。<BR><BR><BR><BR>注意,该单元的名字不能与它的工程中所使用的所有包中的单元的名字相同。不赞成使用一般的或通用的单元名字。<BR><BR><BR><BR>4.5.5
构件单元<BR><BR><BR><BR>4.5.5.1
命名<BR><BR><BR><BR>构件单元应放在独立的目录,以将它们同定义构件组或构件集合的单元区分开来。它们要永远同工程在不同的目录。单元名字应同它们的内容相符。<BR><BR><BR><BR>注意:查阅“用户定义的构件”部分来获得更多有关构件命名标准的信息。<BR><BR><BR><BR>4.6
文件头<BR><BR><BR><BR>建议在所有源文件、工程文件、单元等等中使用信息化文件头。一个良好的文件头应包含以下信息:<BR><BR>{<BR><BR>版权…
著作的年、月、日…<BR><BR>}<BR><BR>五、窗体和数据模板<BR><BR><BR><BR>5.1
窗体<BR><BR><BR><BR>5.1.1
窗体类型命名标准<BR><BR><BR><BR>窗体类型的取名应能表达使用该窗体的目的。类型定义应加以前缀T。前缀后面跟随着描述性的名字。最后,应加以Form后缀来描述名字。例如,一个“关于”的窗体的类型的名字应为:<BR><BR>
TAboutFrom =
class(TForm);<BR><BR>主窗体的定义为:<BR><BR> TMainForm
= class(TForm);<BR><BR>一个用户接入窗体的名字应象:<BR><BR>
TCustomerEntryForm = class(TForm);<BR><BR><BR><BR>5.1.2
窗体实例命名标准<BR><BR><BR><BR>窗体实例应是没有带前缀T的相应类的名字。例如,对应于前面窗体类型而言,其实例的名字应为:<BR><BR><BR><BR>
类型名称
实例名称<BR><BR> TAboutForm
AboutForm<BR><BR> TMainForm
MainForm<BR><BR> TCustomerEntryForm
CustomerEntryForm<BR><BR><BR><BR>5.1.3
自动创建窗体<BR><BR><BR><BR>只有主窗体可以是自动创建的除非有其它更好的理由不这样做。所有其它的窗体必需从工程选项对话框中的自动创建列表中移走。查阅以下部分来获得更多的信息。<BR><BR><BR><BR>5.1.4
模式窗体实例化函数<BR><BR><BR><BR>所有的窗体单元都应包含一个窗体实例化函数,该函数用来创建、设置、模式地显示窗体,并释放窗体。该函数应返回窗体的模式结果。该函数要传递的参数应遵循本文档指定的“参数传递”标准。通过这种方式封装的函数性有助于代码的再利用和维护。<BR><BR><BR><BR>该窗体的变量要从单元中移走,并再窗体实例的函数中进行本地式地定义。注意,这就意味着该窗体必需从工程/选项对话框中的自动创建列表中剔除。参考本文档后面的“自动创建窗体”。<BR><BR><BR><BR>例如,下面的单元展示了再GetUserData窗体中的一个函数。<BR><BR> unit
UserDataFrm;<BR><BR> interface<BR><BR> uses<BR><BR>windows,
Messages, SysUtils, Classes, Graphics, Controls, Forms,<BR><BR>Dialogs,
StdCtrls;<BR><BR> type<BR><BR> TUserDataForm =
class(TForm)<BR><BR> edtUserName : TEdit;<BR><BR>
edtUserID : TEdit;<BR><BR> private<BR><BR>
{ Private declarations }<BR><BR>
public<BR><BR> { Public declarations
}<BR><BR> end;<BR><BR> function GetUserData(var aUserName
: String; var aUserID : Integer) : <BR><BR>
Word;<BR><BR> implementation<BR><BR> {$R *.DFM
}<BR><BR><BR><BR> function GetUserData(var aUserName : String; var
aUserID : Integer) : <BR><BR>
word;<BR><BR> var<BR><BR> UserDataForm :
TuserDataForm;<BR><BR> begin<BR><BR> UserDataForm :=
TuserDataForm.Create(Application);<BR><BR> try<BR><BR>
UserDataForm.Caption := ‘Getting User Data’;<BR><BR>
Result := UserDataForm.ShowModal;<BR><BR>
if (Result = mrOK) then<BR><BR>
begin<BR><BR> aUserName :=
UserDataForm.edtUserName.Text;<BR><BR> aUserID
:= StrToInt(UserDataForm.edtUserID.Text);<BR><BR>
end;<BR><BR> finally<BR><BR>
UserDataForm.Free;<BR><BR>
end;<BR><BR> end;<BR><BR> end.<BR><BR><BR><BR>5.2
数据模板<BR><BR><BR><BR>5.2.1
数据模板命名标准<BR><BR><BR><BR>数据模板的取名要符合使用该数据模板的目的。类型的定义应加以前缀T,后面紧接着描述性的名字,最后要加以后缀单词“DataModule”。例如,一个自定义的数据模板有时候应该象:<BR><BR>
TCustomerDataModule =
class(TDataModule)<BR><BR>一个命令式的数据模板的名字应象:<BR><BR>
TOrdersDataModule =
class(TDataModule)<BR><BR><BR><BR>5.2.2
数据模板实例命名标准<BR><BR><BR><BR>数据模板实例的名称应是对应不带前缀T的类型的名称。例如,对于前面的窗体类型而言,其实例的名称应为:<BR><BR>
类型名称
实例名称<BR><BR>
TCustomerDataModule
CustomerDataModule<BR><BR>
TOrdersDataModule
OrdersDataModule<BR><BR><BR><BR>六、包<BR><BR><BR><BR>6.1
使用运行包和设计包的比较<BR><BR><BR><BR>运行时刻的包应只包含其它构件包所要求的单元或构件。另外,包含属性/构件编辑器和其它只为设计的代码应放入到设计时刻包中。注册单元应放在设计包中。<BR><BR><BR><BR>6.2
文件命名标准<BR><BR><BR><BR>包的名称应依照下面的例子:<BR><BR>“iiilibvv.pkg” - 设计时刻包</FONT>
<BR></P>
<P><FONT style="FONT-SIZE: 11pt; LINE-HEIGHT: 16pt">“iiistdvv.pkg” -
运行时刻包<BR><BR>字符“iii”表示一个3字符标识前缀。这个前缀用来表明公司、个人或其它有标识意义的实体。<BR><BR><BR><BR>字符“vv”表示为该包想要对应Delphi某个版本的包的版本号。<BR><BR><BR><BR>注意,包的名字中包含“lib”或“std”的意思是表明这是一个设计时刻包还是一个运行时刻包。<BR><BR><BR><BR>如果既是设计时刻包又是运行时刻包,该文件的命名是同上面一样的,例如,为Delphi
4开发者指南做的包的名称应为:<BR><BR><BR><BR>DdgLib40.pkg – 设计时刻包<BR><BR>DdgStd40.pkg –
运行时刻包<BR></FONT></P></TD></TR></TBODY></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -