在网上看到很多人都在为Delphi是否支持C++/Java中的静态变量及静态方法的功能而困扰,其实这在Delphi中是很简单的.

//=========================================
//
StaticVarTestU
-
定义了可以计数的类,通过类方法即可访问此类的对象数
//=========================================
unit StaticVarTestU;

interfacetype
TStaticVarClass
=
class
public
//
constructor
constructor Create();
destructor Destroy; override;
//
类方法,取得对象的计数class
function
ObjectCount:
integer
;
protected
private
end
;

implementation

Var
LObjCount:
integer
;


{ TStaticVarClass }

constructor TStaticVarClass.Create;
begin
inc(LObjCount);
//
使用局部变量
end
;destructor TStaticVarClass.Destroy;
begin
dec(LObjCount);
//
使用局部变量 inherited;
end
;class
function
TStaticVarClass.ObjectCount:
integer
;
begin
Result :
=
LObjCount;
//
返回局部变量
end
;

initialization
LObjCount :
=
0
;
//
初始化

finalization
LObjCount :
=
0
;

end
.

//=========================================
//
StaticTest
-
测试代码,创建10个对象,并访问其计数,再Free掉.
//=========================================
program StaticTest;

{$APPTYPE CONSOLE}

uses
SysUtils,
Classes,
StaticVarTestU in
'
StaticVarTestU.pas';
procedure printObjCount;
begin
WriteLn(Format(
'
The Object Count now is %d', [TStaticVarClass.ObjectCount]));
end
;

var
i:
integer
;
mObjList: TList;
begin
{ TODO
-
oUser
-
cConsole Main : Insert code here }

mObjList :
=
TList.Create;

printObjCount;

for
i :
=
0
to
10
do
begin
mObjList.Add(TStaticVarClass.Create());

printObjCount;
end
;

for
i :
=
0
to
mObjList.Count
-
1
do
begin
TStaticVarClass(mObjList.Items[i]).Free;

printObjCount;
end
;

mObjList.Free;

readln;
end
.
静态方法就是使用Class Function. 静态变量则使用单元局部变量来实现. 代码如下:http://blog.csdn.net/hydonlee/
























































































from作者Blog: