program Project1;
{$modeswitch advancedrecords}
Type
{ TSharedData }
TSharedData = Record
SharedInteger:Integer;
SharedString:String;
Class Operator Copy(ConstRef aSrc:TSharedData;var tsd:TSharedData);
end;
PSharedData=^TSharedData;
{ TMyClass }
TMyClass = Class
Private
FSharedData:PSharedData;
Public
Procedure SyncTo(Dest:TMyClass);
Property SharedData:PSharedData Read FSharedData;
//Constructor Create(ASrc:TMyClass);
//Destructor Destroy;Override;
end;
{ TMyClass }
procedure TMyClass.SyncTo(Dest: TMyClass);
begin
Dest.FSharedData:=Self.FSharedData;
end;
//constructor TMyClass.Create(ASrc: TMyClass);
//begin
// ////Inherited(Nil);
// //If ASrc<>Nil Then
// // FSharedData:=ASrc.FSharedData
// //Else If FSharedData=Nil Then
// // New(FSharedData);
//end;
//
//destructor TMyClass.Destroy;
//begin
// //If FSharedData<>Nil Then
// // Dispose(FSharedData);
// inherited Destroy;
//end;
{ TSharedData }
class operator TSharedData.Copy(ConstRef aSrc: TSharedData; var tsd: TSharedData
);
begin
tsd.SharedInteger:=aSrc.SharedInteger;
tsd.SharedString:=aSrc.SharedString;
end;
Var
o1,o2:TMyClass;
sd:PSharedData;
begin
New(sd);
sd^.SharedInteger:=42;
sd^.SharedString:='Dont panic!';
o1:=TMyClass.Create;
o1.FSharedData:=sd;
o2:=TMyClass.Create;
o1.SyncTo(o2);
Writeln(o1.SharedData^.SharedInteger);
Writeln(o1.SharedData^.SharedString);
Writeln(o2.SharedData^.SharedInteger);
Writeln(o2.SharedData^.SharedString);
sd^.SharedInteger:=84;
sd^.SharedString:='Now you can panic!';
Writeln(o1.SharedData^.SharedInteger);
Writeln(o1.SharedData^.SharedString);
Writeln(o2.SharedData^.SharedInteger);
Writeln(o2.SharedData^.SharedString);
Dispose(sd);
O1.Free;
O2.Free;
end.