在网上看到很多人都在为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/
//=========================================
// 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 .
from作者Blog: