TListを継承したクラスTListExを作成して、
Addメソッドを使えなくしたいのですが、
どのような方法がありますでしょうか。
こんにちは.Mr.XRAYです.
>Addメソッドを使えなくしたいのですが、
使えなくするという意味は,
1. メンバーから全くなくしてしまう
2. 存在するが,実際にはAddの機能を無効にする
ということが考えられます.
1. は,TListのAddはpublicメンバなので遮蔽できません.したがってAddがないTListを
自分で全て新規作成する
2. は,自分でAddを再定義する(この場合,Addメソッドそのものは存在することになる)
のどちらかしかないでしょう.
メソッドやプロパティは再定義すれば,それが使用されます.
ありがとうございます。
自前でAddExメソッドを作る代わりに、元のAddメソッドを無効に
したかったのですが、メソッドの再定義でもできそうです。ちなみに、
TListEx = class(TList)
function Add(Item: TFoo): Integer;
end;
とした場合、
function TListEx.Add(Item: TFoo): Integer;
begin
inherited Add(Item);
end;
でいいのでしょうか。
戻り値のIntegerをどう取るかが分からないのですが。
> inherited Add(Item);
inheritedというのは,元のコードを実行するものです.
これではAddは無効になりません.
完全無効にするのであれば,
procedure TListEx.Add(Item: Pointer);
begin
//
end;
でしょうか.無効なのでfunctionにする必要がないなら.
count値を取得したいなら,functionで,
Result := count;
でしょうか.TListのAdd関数はvirtualでもdynamicでもないので,コードは自由です.
引数なしも,引数のリストの変更も自由です.
参考までに,元が関数の時は,その元の関数値を取得するのは
Result := inherited Add(Item);
ですね.inheritedが元の関数ですから.
ありがとうございます。
試してみます。
ツイート | ![]() |