unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyClass = class(TPersistent)
private
FMsg: string;
procedure SetMsg(AMsg: string);
function GetMsg(): string;
public
procedure AssignTo(Dest: TPersistent); override; //重载TPersistent
property Msg: string read GetMsg write SetMsg;
end;
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
FC1, FC2: TMyClass;
begin
FC1 := TMyClass.Create;
FC2 := TMyClass.Create;
FC1.Msg := 'this is my msg';
FC2.Assign(FC1); // Assign的底层调用了 AssignTo
ShowMessage(FC2.Msg);
end;
{ TMyClass }
procedure TMyClass.AssignTo(Dest: TPersistent);
begin
if Dest is TMyClass then
(Dest as TMyClass).Msg := Self.FMsg
else
inherited; //inherited会抛出异常
end;
function TMyClass.GetMsg: string;
begin
Result := FMsg;
end;
procedure TMyClass.SetMsg(AMsg: string);
begin
FMsg := AMsg;
end;
end.