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是怎么实现下标操作的呢,也没有重载,是否是某个属性或怎样?

解决方案 »

  1.   

    看基类TStrings的代码里的Strings属性,关键字:默认数组属性
      

  2.   

    TStrings[] = TStrings.Strings[]
      

  3.   

    对其默认属性
    property Strings[Index: Integer]: string read Get write Put; default;
    按索引取
      

  4.   

    这个原理是什么,我看到其他类也是可以取下标操作符,但是并没有strings这样一个属性!
      

  5.   

    难道是有default的对类取下标就是对该属性取下标?
      

  6.   

    一个类只能有一个属性标记为default,标记为default的属性可以直接对类进行取下标操作
      

  7.   

    default 关键字,对象名直接对属性操作
      

  8.   

    把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;