深入类中的方法(5)- 静态方法、类方法、静态类方法
//静态方法是默认的, 如果不是虚方法或纯虚方法, 那它就是一个静态方法.
//类方法就是通过类名就可以访问的方法 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; {类方法示例:} TMyClass = class(TObject) class procedure alert(s: string); {类方法只是比静态方法多了一个 class 指示字} end; { 类方法不能在 private 和 protected 区; 类方法不能是虚方法; 类方法只能使用类中的、在对象实例化以前的数据. } var Form1: TForm1; implementation {$R *.dfm} { TMyClass } class procedure TMyClass.alert(s: string); begin ShowMessage(s); end; {类方法可以直接使用} procedure TForm1.Button1Click(Sender: TObject); begin TMyClass.alert('万一'); {万一} end; {类的对象当然也能使用} procedure TForm1.Button2Click(Sender: TObject); var MyClass: TMyClass; begin MyClass := TMyClass.Create; MyClass.alert('万一'); {万一} MyClass.Free; end; end.
//静态类方法 {现在的 Delphi 不仅仅有类方法, 同时有: 类变量: class var 类常量: class const 类类型: class type 类属性: class property 静态类方法就是给类属性来调用的, 它可以存在与私有区(private), 譬如下面的 SetName 就是一个静态类方法: } TMyClass = class(TObject) private class var FName: string; class procedure SetName(const Value: string); static; {静态类方法又多了一个 static 指示字} published class property Name: string read FName write SetName; end;
编程语言无所谓高低级,唯适用罢了。语言结构再天花乱坠,富丽堂皇终不过CPU上的0和1。