2つのDelphiクラスがあります。親クラスは、文字列フィールドFSSNを宣言し、プロパティSSNを、フィールドを直接読み書きするアクセサーと照合します。私の子クラスでは、プロパティSSNを再宣言して、子クラスのセッターを使用します(可能であれば、フィールドに書き込む前にSSNを変換します)。
プロパティSSNは親クラスのメソッドによって設定されますが、(インスタンスが子クラスのインスタンスである場合)子セッターを呼び出す必要があります。ただし、コードを実行すると、子セッターを入力することはなく、フィールドは親のプロパティ宣言を使用して直接設定されているように見えます。
これはできますか?
(私は、親クラスにsetterプロシージャを導入し、子でオーバーライドすることでこれを達成できることを認識しています。可能であれば、親クラスを邪魔したくないです)。
これが私がこれまでに持っているものです(もちろん、大幅に簡略化されたバージョンで):
TCustomPerson = class(TObject)
protected
FSSN: String;
public
procedure LoadFromXML(ANode: IXMLNode);
property SSN: String read FSSN write FSSN;
TMyPerson = class(TCustomPerson)
protected
procedure SetSSN(ASSN: String);
public
property SSN: String read FSSN write SetSSN; // <=== Setter introduced.
procedure TCustomPerson.LoadFromXML(ANode: IXMLNode);
var ThisSSN: String;
begin
//extract SSN from XML into ThisSSN
SSN := ThisSSN; // Expect to invoke SetSSN.
end
procedure TMyPerson.SetSSN(ASSN: String);
begin
FSSN := ValidateSSN(ASSN); // <== Breakpoint here never reached.
end