16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"property の override"
この発言に対し以下のコメントが寄せられています
#00859 花井 達 さん RE:property の override は不可
Inherited がプロパティにも使えるという例です。
以下では、静的(でしかも private)な SetText の動作に変更を加える
ためにText プロパティを override しています。
(本当は上書きですが、意味を考慮して override といわせてもらいます)
TAncestor990424 = class
private
FStrings: TStrings;
function GetText: String;
procedure SetText(const Value: String);
public
constructor Create;
destructor Destroy; override;
function GetCharNumber: Integer;
property Text: String read GetText write SetText;
end;
TDescendant990424 = class(TAncestor990424)
protected
function GetText: String;
procedure SetText(const Value: String);
public
property Text: String read GetText write SetText;
end;
{ TAncestor990424 }
constructor TAncestor990424.Create;
begin
FStrings:= TStringList.Create;
end;
destructor TAncestor990424.Destroy;
begin
FStrings.Free;
inherited;
end;
function TAncestor990424.GetText: String;
begin
Result:= FStrings.Text;
end;
procedure TAncestor990424.SetText(const Value: String);
begin
FStrings.Text:= Value;
end;
function TAncestor990424.GetCharNumber: Integer;
begin
Result:= Length(FStrings.Text);
end;
{ TDescendant990424 }
function TDescendant990424.GetText: String;
begin
{親クラスの property の値取得}
Result:= Inherited Text;
end;
procedure TDescendant990424.SetText(const Value: String);
begin
{親クラスの property に値セット}
Inherited Text:= AnsiUpperCase(Value)
end;
(* TEST PROGRAM *)
var
ADescendant: TDescendant990424;
procedure TForm1.FormCreate(Sender: TObject);
begin
ADescendant:= TDescendant990424.Create;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ADescendant.Text:= 'setting overridden property';
ShowMessage(ADescendant.Text);
ShowMessage(IntToStr(ADescendant.GetCharNumber));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ADescendant.Free;
end;
参考記事
Brown, P. "Property Overriding", Delphi Informant (1999) vol. 5, num. 4,
pp. 56-60.
この記事の中では TEdit の ReadOnly プロパティのアクセスメソッドに
手を加える手法などを紹介しています。
Original document by 佐々木@六角堂 氏 ID:(CXE02604)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|