Home New Help Edit

Delphi Assign使い方


Suns & Moon Laboratory


Assginを実装するには


TPersistentを継承したクラスを作成する

AssignToを実装する

検討


Delphi2010のAssign実装をソースコードから追ってみる。


Delphi2010 classes.pasから引用
TPersistent = class(TObject) private procedure AssignError(Source: TPersistent); protected procedure AssignTo(Dest: TPersistent); virtual; public procedure Assign(Source: TPersistent); virtual; end;
nilかどうかのチェック
procedure TPersistent.Assign(Source: TPersistent); begin if Source <> nil then Source.AssignTo(Self) else AssignError(nil); end;
実際のコピーを行うところ。
これをオーバーライドしてコピーを実装する。
これをオーバーライドしないと例外発生する。
procedure TPersistent.AssignTo(Dest: TPersistent); begin Dest.AssignError(Self); end;
エラー表示
procedure TPersistent.AssignError(Source: TPersistent); var SourceName: string; begin if Source <> nil then SourceName := Source.ClassName else SourceName := 'nil'; raise EConvertError.CreateResFmt(@SAssignError, [SourceName, ClassName]); end;

Assignを直接オーバーライドで良いんじゃないか?

直接オーバーライドした場合、nilチェックとエラー表示を自分で実装する必要がある
AssignTo実装の方が簡単。

参考


FDelphi TPersistent継承のサンプル

Home New Help Edit
2018-08-23 18:36:45 32400