TObjectList内の各オブジェクトのプロパティへアクセスするには?

解決


KR  2007-10-03 16:38:16  No: 27938

再度、お世話になります。
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のプロパティにもアクセス
  したい。

稚拙な質問で申し訳ありませんが、ご教授のほど、よろしく
お願いいたします。


おに  2007-10-03 17:56:06  No: 27939

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出来ない物でも、再定義しちゃえばいいので。


こはく  2007-10-03 18:06:32  No: 27940

>たとえば、下記のようにしたいのですが。
>VarBuf := FooList.Item[0].Var;

VarBuf := TFoo(FooList.Item[0]).Var;
これでできないでしょうか。


KR  2007-10-04 17:05:06  No: 27941

おにさま、こはくさま
ご回答ありがとうございます。

返信が遅れて申し訳ありません。
早速試してみます。


KR  2007-10-05 16:04:34  No: 27942

おにさま、こはくさま
ご教授いただいた方法で解決いたしました。

再度お世話になることがあると思いますが、
その際は、よろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加