{$MODE OBJFPC}
{$LONGSTRINGS ON}
{$APPTYPE CONSOLE}
uses SysUtils, Classes;
type
TClassWithClassField = class(TObject)
strict private
class var FClassVar: TStringList;
var FGeneralVar: TStringList;
public
class constructor Create;
class destructor Destroy;
constructor Create;
destructor Destroy; override;
property GeneralVar: TStringList read FGeneralVar;
class property ClassVar: TStringList read FClassVar;
end;
class constructor TClassWithClassField.Create;
begin
FClassVar := TStringList.Create;
FClassVar.Append('Class var');
Writeln('class constructor');
end;
class destructor TClassWithClassField.Destroy;
begin
FClassVar.Free;
Writeln('class destructor');
end;
constructor TClassWithClassField.Create;
begin
FGeneralVar := TStringList.Create;
FGeneralVar.Append(Format('General var Self=%p', [Pointer(Self)]));
Writeln('constructor');
end;
destructor TClassWithClassField.Destroy;
begin
FGeneralVar.Create;
Writeln('destructor');
end;
procedure Test;
var
C1, C2: TClassWithClassField;
begin
Writeln('--Start');
C1 := TClassWithClassField.Create;
try
C2 := TClassWithClassField.Create;
try
Write(C1.ClassVar.Text);
Write(C1.GeneralVar.Text);
Write(C2.ClassVar.Text);
Write(C2.GeneralVar.Text);
finally
C2.Free;
end;
finally
C1.Free;
end;
Writeln('--End');
end;
begin
Test;
Readln;
end.