delphi下标操作符([])

tjj5203 2010-08-06 11:41:11

TStringSparseList = class(TStrings)
private
FList: TSparseList; { of StrItems }
FOnChange: TNotifyEvent;
protected
function Get(Index: Integer): String; override;
function GetCount: Integer; override;
function GetObject(Index: Integer): TObject; override;
procedure Put(Index: Integer; const S: String); override;
procedure PutObject(Index: Integer; AObject: TObject); override;
procedure Changed;
public
constructor Create(Quantum: TSPAQuantum);
destructor Destroy; override;
procedure ReadData(Reader: TReader);
procedure WriteData(Writer: TWriter);
procedure DefineProperties(Filer: TFiler); override;
procedure Delete(Index: Integer); override;
procedure Exchange(Index1, Index2: Integer); override;
procedure Insert(Index: Integer; const S: String); override;
procedure Clear; override;
property List: TSparseList read FList;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;

上面是delphi中的一个类

function TStringGrid.GetCells(ACol, ARow: Integer): string;
var
ssl: TStringSparseList;
begin
ssl := TStringSparseList(TSparseList(FData)[ARow]);
if ssl = nil then Result := '' else Result := ssl[ACol];
end;

ssl := TStringSparseList(TSparseList(FData)[ARow]);
ssl[ACol];
以上两句话都是直接对TStringSpareList直接取下标操作,对于数组取下标好理解。
对于类TStringSpareList是怎么实现下标操作的呢,也没有重载,是否是某个属性或怎样?
...全文
201 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjj5203 2010-08-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]

对其默认属性
property Strings[Index: Integer]: string read Get write Put; default;
按索引取
[/Quote]
难道是有default的对类取下标就是对该属性取下标?
tjj5203 2010-08-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tjianliang 的回复:]

TStrings[] = TStrings.Strings[]
[/Quote]
这个原理是什么,我看到其他类也是可以取下标操作符,但是并没有strings这样一个属性!
bdmh 2010-08-06
  • 打赏
  • 举报
回复
对其默认属性
property Strings[Index: Integer]: string read Get write Put; default;
按索引取
亮剑_ 2010-08-06
  • 打赏
  • 举报
回复
TStrings[] = TStrings.Strings[]
Harryfin 2010-08-06
  • 打赏
  • 举报
回复
看基类TStrings的代码里的Strings属性,关键字:默认数组属性
lyhoo163 2010-08-06
  • 打赏
  • 举报
回复
把StringSparseList变成String,再作访问操作:

for i:=0 to StringSparseList.count do
begin
S:=StringSparseList[i];
for j:=1 to length(S) do
begin
对 S[i] 的操作
....
end;
end;
ddzjok 2010-08-06
  • 打赏
  • 举报
回复
default 关键字,对象名直接对属性操作
麦客来了 2010-08-06
  • 打赏
  • 举报
回复
一个类只能有一个属性标记为default,标记为default的属性可以直接对类进行取下标操作

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧