Delphi面向对象编程的20条规则

本文列举了20条Delphi面向对象编程的规则,包括每个类对应一个单元、为组件命名、合理命名事件、使用窗体方法、添加构造器、避免全局变量、不直接使用Form1、添加窗体属性等,旨在提高代码可读性和程序设计的灵活性。
摘要由CSDN通过智能技术生成

        规则一:为每一个类创建一个单元(One Class,One Unit)

  请始终牢记这一点:类的私有(private)和保护(protected)的部分只对于其他单元中的类和过程(procedure)才是隐藏的.因此,如果你想得到有效的封装性,你应该为每一个类使用一个不同的单元。对于一些简单的类,比如那些继承其他类的类,你可以使用一个共享的单元。不过共享同一个单元的类的数目是受到限制的:不要在一个简单的单元里放置超过20个复杂的类,虽然Borland公司的VCL代码曾经这样做过。
如果你使用窗体的时候,Delphi会默认的遵循“一个类使用一个单元”的规则,这对于程序员来说也是十分方便的。当你向你的项目中添加一个没有窗体的类时,Delphi也会创建一个新的独立的单元。

  规则二:为组件命名(Name Components)

  为每一个窗体和单元给出一个有意义的名字是十分重要的。窗体和单元的名字必须是不同的,不过我趋向于为他们两者使用相似的名字,如对于关于窗体和单元可以为他们使用AboutForm 和About.pas.
为组件使用带有描述性的名字同样十分重要。最常见的命名方式是使用类的小写字母开头,再加上组件的功能,如BtnAdd 或者editName。采用这样的命名方式为组件命名可能会有很多相似的名字,而且也没有一个最好的名字,到底应该选择那一个应该依据你的个人爱好而定。

  规则三:为事件命名(Name Events)

  对于事件处理方法给出合适的名字更加重要。如果你对于组件给出了一个合适的名字,那么系统默认的名字ButtonClick将变成BtnAddClick。虽然从这个名字中我们可以猜到这个事件处理程序的功能,但是我认为使用一个能够描述该方法的作用的名字,而不是采用Delphi附加的名字是一种更好的方式。例如,BtnAdd按钮的OnClick事件可以命名成AddToList。这会使得你的程序可读性更强,特别是当你在这个类的其他方法中调用这个事件处理程序时,而且这会帮助程序员为类似的事件或是不同的组件选用相同的方法。不过我必须声明,使用动作(Actions)是目前开发重要的程序时我最喜欢的方法。

  规则四:使用窗体方法(Use Form Methods)

  窗体都是一些类,因此窗体的代码是以方法组织的。你可以向窗体中添加事件处理程序,这些处理程序完成一些特别的功能,而且他们能被其他方法调用。除了事件处理方法外,你还可以向窗体添加完成动作的特别定义的方法以及访问窗体状态的方法。在窗体中添加一些公共的(Public)方法供其他窗体调用要比其他窗体直接操作他的组件要好。

规则5:添加窗体构造器(Add Form Constructors)

  在运行时创建的第二个窗体除了一个默认的构造器(从Tcomponent 类继承而来)外还会提供其他特殊的构造器。如果你不需要考虑和Delphi4以前的版本的兼容性问题,我建议你重载(Overload)Create方法,添加必要的初始化参数。具体代码可参见下面的代码:

Public
Constructor Create(Text:string): reintroduce ; overload;
Constructor TformDialog.Create(Text:string);
Begin
Inherited Create(Application);
Edit1.Text:=Text;
End;


  规则6:避免全局变量(Avoid Global Variables)

  应该避免使用全局变量(就是那些在单元的interface 部分定义的变量)。下面将会有一些建议帮助你如何去做。

  如果你需要为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如何使用汉字库的代码,delphi 6 switch (PixelSize) { case 12: HZKSize = 24; //汉字库字模大小24字节(12*16/8) ASCSize = 12; //ASC字库字模大小12字节 AreaOffset = 0;//16区以前不独立成字库 File1Name = GetAppPath()+"font\\HZK12"; iFileHandle1 = fopen(File1Name.c_str(), "rb"); File2Name = GetAppPath()+"font\\ASC12"; iFileHandle2 = fopen(File2Name.c_str(), "rb"); break; case 16: HZKSize = 32; //汉字库字模大小32字节(12*16/8) ASCSize = 16; //ASC字库字模大小16字节 AreaOffset = 0;//16区以前不独立成字库 File1Name = GetAppPath()+"font\\HZK16"; iFileHandle1 = fopen(File1Name.c_str(), "rb"); File2Name = GetAppPath()+"font\\ASC16"; iFileHandle2 = fopen(File2Name.c_str(), "rb"); break; case 24: HZKSize = 72; //汉字库字模大小32字节(24*24/8) ASCSize = 72; //ASC字库字模大小16字节(24*24/8) AreaOffset = 15;//16区以前独立成字库 File1Name = GetAppPath()+"font\\HZK24F"; iFileHandle1 = fopen(File1Name.c_str(), "rb"); File2Name = GetAppPath()+"font\\ASC24"; iFileHandle2 = fopen(File2Name.c_str(), "rb"); File3Name = GetAppPath()+"font\\HZK24T"; iFileHandle3 = fopen(File3Name.c_str(), "rb"); break; case 40: HZKSize = 200; //汉字库字模大小32字节(40*40/8) ASCSize = 120; //ASC字库字模大小16字节(40*24/8) AreaOffset = 15;//16区以前独立成字库 File1Name = GetAppPath()+"font\\HZK40S"; iFileHandle1 = fopen(File1Name.c_str(), "rb"); File2Name = GetAppPath()+"font\\ASC40"; iFileHandle2 = fopen(File2Name.c_str(), "rb"); File3Name = GetAppPath()+"font\\HZK40T"; iFileHandle3 = fopen(File3Name.c_str(), "rb"); break; case 48: HZKSize = 288; //汉字库字模大小32字节(48*48/8) ASCSize = 144; //ASC字库字模大小16字节(48*24/8) AreaOffset = 15;//16区以前独立成字库 File1Name = GetAppPath()+"font\\HZK48S"; iFileHandle1 = fopen(File1Name.c_str(), "rb"); File2Name = GetAppPath()+"font\\ASC48"; iFileHandle2 = fopen(File2Name.c_str(), "rb"); File3Name = GetAppPath()+"font\\HZK48T"; iFileHandle3 = fopen(File3Name.c_str(), "rb"); break;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值