---摘自:http://blog.youkuaiyun.com/visli/archive/2005/09/07/474244.aspx
原作者: Zarko Gajic 翻译: visli
Delphi中, 我们常说的方法(method)通常是指, 在对象中执行某种操作的一个过程或函数. 类方法是作用于一个类引用上(而不是对象引用上)的方法.
如果您能理解上面的说法, 您就能发现尽管您还没有创建一个类的实例(即对象), 您仍可以使用一个类方法.
类方法 vs. 对象方法
每当您动态创建一个Delphi对象时, 您都会用到一个类方法: 构造函数.
Create 构造函数就是一个类方法, 不同于我们在实际Delphi编程中所大量遇到的对象方法. 一个类方法就是类的的一个过程或函数, 一个对象方法是能够被类的实例调用的过程或函数.
下面就是一很好的说明例子, 类与方法都用红色进行标识:
myCheckbox := TCheckbox.Create(nil) ;
这里的Create通常被叫作构造函数, 属于类方法, 它前面被加上类名与点号作为前缀("TCheckbox."). 类的实例就是这样被创建的. 返回的结果就是TCheckbox类的一个实例. 这种实例被称为对象. 把这行代码与下面一行代码比较一下:
myCheckbox.Repaint;
这里调用了TCheckbox对象的Repaint方法(继承自TWinControl). Repaint的调用前面被加上了对象变量与点号作为前缀("myCheckbox.").
类方法无需类的实例而被调用 (如: "TCheckbox.Create"). 类方法也可以直接被一个对象调用 (如: "myCheckbox.ClassName"). 然而, 对象方法只能被类的实例所调用 (如: "myCheckbox.Repaint").
在背后, Create构造函数用于为对象分配内存 (并执行TCheckbox或其父类指定的一些附加初始化工作).
实验您自己的类方法
假设有一个关于对话框 (一个 "关于本程序" 的自定义窗体). 在我的代码中有下面一些内容:
~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TfrMain.mnuInfoClick(Sender: TObject) ;
begin
AboutBox:=TAboutBox.Create(nil) ;
try
AboutBox.ShowModal;
finally
AboutBox.Release;
end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~
上面当然是一个非常好的实现方法, 但是为了增强代码的可读性与更好的管理, 改成下面的写法也许更好:
~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TfrMain.mnuInfoClick(Sender: TObject) ;
begin
TAboutBox.ShowYourself;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~
上面的代码上调用了TAboutBox类的 "ShowYourself" 这个类方法. "ShowYouself" 方法必须使用关键字 "class" 进行标记:
~~~~~~~~~~~~~~~~~~~~~~~~~
class procedure TAboutBox.ShowYourself;
begin
AboutBox:= TAboutBox.Create(nil) ;
try
AboutBox.ShowModal;
finally
AboutBox.Release;
end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~
注意:
- 类方法的定义也必须在procedure或function关键字前加上class保留字进行区分.
- AboutBox 窗体设置为不自动创建 (菜单Project-Options).
- 添加 AboutBox 单元名到主窗体单元文件的 uses 区段.
- 不要忘记把过程在AboutBox单元的接口(public)部分进行申明.