在網上看到很多人都在爲Delphi是否支持C++/Java中的靜態變量及靜態方法的功能而困擾,其實這在Delphi中是很簡單的.
靜態方法就是使用Class Function. 靜態變量則使用單元局部變量來實現. 代碼如下:
//=========================================
// StaticVarTestU - 定義了可以計數的類,通過類方法即可訪問此類的對象數
//=========================================
unit StaticVarTestU;
interface
type
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.
請大家指正....