起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: yunyan

【搞定】[问题]怎样用TOBJECTLIST实现自定义的对象列表**

[复制链接]
发表于 2007-2-6 09:58:15 | 显示全部楼层
TSPRYs = class(Tobjectlist)
   private
     function GetItems(Index: Integer): TSPRY;
     procedure SetItems(Index: Integer; const Value: TSPRY);
   public
    //constructor TSPRYs;Overload ;
    constructor Create(guid:string);
    property Items[Index: Integer]: TSPRY read GetItems write SetItems;
   end;

这样看看呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 10:02:04 | 显示全部楼层
不行,提示没有定义getitems
回复 支持 反对

使用道具 举报

发表于 2007-2-6 10:03:06 | 显示全部楼层
function GetItems(Index: Integer): TSPRY;
     procedure SetItems(Index: Integer; const Value: TSPRY);
要实现的啊


function TSPRYs.GetItems(Index: Integer): TSPRY;
begin
  Result := Items[Index];
end;

procedure TSPRYs.SetItems(Index: Integer; const Value: TSPRY);
begin
  Items[Index]:= Value;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 10:03:56 | 显示全部楼层
function GetItems(Index: Integer): TSPRY;
上次发错了,这个函数怎样实现呢
回复 支持 反对

使用道具 举报

发表于 2007-2-6 10:09:05 | 显示全部楼层
在上面
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 10:13:30 | 显示全部楼层
这样实现对吗

result:=(self[index] as tspry);

还有一个问题,用ITEMS调用对了,但是用TSPRYS[0],调用出来的是OBJECT,又怎样解决
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 10:16:49 | 显示全部楼层
你实现的有GETITEMS有问题,会死循环
回复 支持 反对

使用道具 举报

发表于 2007-2-6 10:29:02 | 显示全部楼层
哦,你测试过了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 10:38:25 | 显示全部楼层
是的,因为本身GETITEMS是用来读ITEMS[INDEX]的,实现的时候还没有读的方法,所有就一直自己调用自己,没有结束条件,造成了死循环

怎样实现TSPRYS[0]调出来的就是对象TSPRY的属性
回复 支持 反对

使用道具 举报

发表于 2007-2-6 10:47:28 | 显示全部楼层
恩,确实会死循环.

TObjectList = class(TList)
  private
    FOwnsObjects: Boolean;
  protected
    procedure Notify(Ptr: Pointer; Action: TListNotification); override;
    function GetItem(Index: Integer): TObject;
    procedure SetItem(Index: Integer; AObject: TObject);
  public
    constructor Create; overload;
    constructor Create(AOwnsObjects: Boolean); overload;

    function Add(AObject: TObject): Integer;
    function Extract(Item: TObject): TObject;
    function Remove(AObject: TObject): Integer;
    function IndexOf(AObject: TObject): Integer;
    function FindInstanceOf(AClass: TClass; AExact: Boolean = True; AStartAt: Integer = 0): Integer;
    procedure Insert(Index: Integer; AObject: TObject);
    function First: TObject;
    function Last: TObject;
    property OwnsObjects: Boolean read FOwnsObjects write FOwnsObjects;
    property Items[Index: Integer]: TObject read GetItem write SetItem; default;
  end;

这些是Delphi里TObjectList的实现

这样也行的
function TSPRYs.GetItems(Index: Integer): TSPRY;
begin
  Result := inherited Items[Index] as  TSPRY;  end;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-24 21:07 , Processed in 0.033494 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表