Delphi有的方法在前面都加上了Class关键字,即方法被声明为类方法。类方法与普通方法不同,普通方法只有在对象被实例化后才可调用,否则会因为对象未被创建而引发异常,这种异常所表现出的特征往往是莫名其妙的。如果跟踪程序就会发现,这种因对象为实例化而造成的异常往往是在调用对象的方法时引发访问无效内存的提示,并有可能造成死机等;并且在出错时很难被发现,因为程序的逻辑是正确的。而类方法的调用却不需要对象的实例化,即对象被声明后就可以调用类方法,因此类方法的编写有一定的约束,即不能访问类所声明的变量。因为类未实例化,变量的存储空间还未分配。
示例1:
//类声明
TMyClass = class
public
class procedure MyProc; //类方式
constructor Create; //Create 也是类方法
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyClass }
constructor TMyClass.Create;
begin
inherited;
MyProc; //内部调用类方法
end;
class procedure TMyClass.MyProc;
begin
ShowMessage('ok'); //类方法实现
end;
procedure TForm1.FormCreate(Sender: TObject);
var
MyClass1: TMyClass;
begin
TMyClass.MyProc; //用类名调用类方法,显示:ok 只有类方法才能 直接用类 调用
MyClass1 := TMyClass.Create; //内部调用类方法,显示:ok 构造
MyClass1.MyProc; //对象调用类方法,显示:ok 类方法 也可以用 对象 调用
MyClass1.Free;
end;