[fpc-pascal] PASCAL programming for Novice
Joao Morais
post at joaomorais.com.br
Sat Jun 9 17:16:12 CEST 2007
Francisco Reyes wrote:
> Michael Van Canneyt writes:
>
>> Both Turbo Pascal's Object Pascal and Delphi's object pascal are
>> supported, depending on which mode you compile in.
>
> If I have a class like:
> program myclass;
> type
> THelloWorld = class
> procedure Put;
> end;
> var
> HelloWorld: THelloWorld;
> procedure THelloWorld.Put;
> begin
> WriteLn('Hello, World!');
> end;
> begin
> HelloWorld := THelloWorld.Create;
> HelloWorld.Put;
> HelloWorld.Free;
> end.
>
>
> How do I use that class in another program?
You can:
uses
UnitWithHello;
...
var
VHello: THelloWorld;
begin
VHello := THelloWorld.Create;
try
VHello.Put;
finally
VHello.Free;
end;
or you can:
unit UnitWithHello;
type
THelloWorldClass = class of HelloWorld;
THelloWorld = class
procedure Put; virtual; abstract;
end;
...
unit AnotherUnit;
uses
UnitWithHello;
...
procedure DoHello(AHelloClass: THelloWorldClass);
var
VHello: THelloWorld;
begin
VHello := AHelloClass.Create;
try
VHello.Put;
finally
VHello.Free;
end;
or you can:
uses
UnitWithHello;
type
THelloWrapper = class
private
FHello: THelloWorld;
function GetHello: THelloWorld;
protected
function InternalHelloClass: THelloWorldClass; virtual; abstract;
property Hello: THelloWorld read GetHello;
public
destructor Destroy; override;
end;
...
destructor THelloWrapper.Destroy;
begin
FHello.Free;
inherited;
end;
function THelloWrapper.GetHello: THelloWorld;
begin
if not Assigned(FHello) then
FHello := InternalHelloClass.Create;
Result := FHello;
end;
or you can:
uses
UnitWithHello;
type
THelloWrapper = class
private
FHello: THelloWorld;
FHelloClass: THelloWorldClass;
function GetHello: THelloWorld;
protected
property Hello: THelloWorld read GetHello;
public
constructor Create(AHelloClass: THelloWorldClass);
destructor Destroy; override;
end;
...
constructor THelloWrapper.Create(AHelloClass; THelloWorldClass);
begin
Assert(Assigned(AHelloClass), 'error');
inherited Create;
FHelloClass := AHelloClass;
end;
destructor THelloWrapper.Destroy;
begin
FHello.Free;
inherited;
end;
function THelloWrapper.GetHello: THelloWorld;
begin
if not Assigned(FHello) then
FHello := FHelloClass.Create;
Result := FHello;
end;
And so on.
--
Joao Morais
More information about the fpc-pascal
mailing list