delphi_assign
*Delphi Assign使い方 [[index]] [[dev/delphi]] [[firemonkey]] #contents **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継承のサンプル>http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00749.html]]
2022-08-08 00:11:21 32400