再度、お世話になります。
Delphiをはじめて間もないものです。
クラスTFooがあり、そのプライベートフィールドFVarはプロパティ
Varで読み書きするものとします。
次に、このクラスTFooを格納するクラスをTObjectListを継承して
作成し、それをTFooListとします。
TFooList = Class(TObjectList)
TFooListの各オブジェクトはItemプロパティで取得できますが、
各オブジェクトのプロパティへアクセスするにはどのようにした
らよろしいでしょうか?
現在、下記のようにしています。
===TFooListの一部===
var
FFooBuf: TFoo;
:
:
private
function GetVar(Index: Integer): Integer;
public
constructor Create;
property Var[Index: Integer]: read GetVar;
:
:
constructor TFooList.Create;
begin
FFooBuf := TFoo.Create;
end;
function TFooList.GetVar(Index: Index): Integer;
begin
FFooBuf := Item[Index];
Result := FFooBuf.Var;
end;
TFooList内のFooのプロパティから取得
VarBuf := FooList.GetVar[0];
たとえば、下記のようにしたいのですが。
VarBuf := FooList.Item[0].Var;
理由としては、下記があります。
(1)実際のTFooには多くのフィールドがある。
(2)実際のTFooは階層的にクラスを包含していて、包含
しているクラスにもアクセスしたい。
<説明>
TFoo <- TBoo <- TPoo
TBooはTPooを包含していて、さらにTFooはTBooを包含
している。TFooListからTPooのプロパティにもアクセス
したい。
稚拙な質問で申し訳ありませんが、ご教授のほど、よろしく
お願いいたします。
TFooList = class(TObjectList)
private
function GetItems(Index: Integer): TFoo;
procedure SetItems(Index: Integer; const Value: TFoo);
public
property Items[Index: Integer]: TFoo read GetItems write SetItems;
end;
function TFooList.GetItems(Index: Integer): TFoo;
begin
Result := TFoo(inherited Items[Index]);
end;
procedure TFooList.SetItems(Index: Integer;
const Value: TFoo);
begin
Items[Index].Assign(Value);
end;
こういう事?
override出来ない物でも、再定義しちゃえばいいので。
>たとえば、下記のようにしたいのですが。
>VarBuf := FooList.Item[0].Var;
VarBuf := TFoo(FooList.Item[0]).Var;
これでできないでしょうか。
おにさま、こはくさま
ご回答ありがとうございます。
返信が遅れて申し訳ありません。
早速試してみます。
おにさま、こはくさま
ご教授いただいた方法で解決いたしました。
再度お世話になることがあると思いますが、
その際は、よろしくお願いいたします。
ツイート | ![]() |