如何实现indexed []默认属性

opc*_*0de 14 delphi class

我有一个类,它在TStringList中包含多个文件名.我可以使用索引访问特定的文件名:

myclass.stringlistclass[index]
Run Code Online (Sandbox Code Playgroud)

但是如何使用以下语法获取文件名?

myclass[index]
Run Code Online (Sandbox Code Playgroud)

我可以实现一个属性来实现这个功能吗?

Mar*_*rck 30

private
  function GetColumnValue(const ColumnName: string): string; overload;
  function GetColumnValue(Index: Integer): string; overload;
  procedure SetColumnValue(Index: integer; const Value: string);
public
  property Values[const ColumnName: string]: string read GetColumnValue; default;
  property Values[ColumnIndex: integer]: string read GetColumnValue write SetColumnValue; default;
end;
Run Code Online (Sandbox Code Playgroud)

这意味着:

  • 您可以拥有多个default索引器属性
  • 多个索引器属性可以具有相同的名称,例如,Values
  • 属性getter可以是重载(具有相同的名称),例如,GetColumnValue
  • Delphi将通过类型签名解决重载问题

  • 你还需要使用`getFilesCount`方法的`FilesCount`属性 (3认同)

Eug*_*its 12

在索引属性上使用"default"关键字. 每个类可以有一个默认属性.

每个类可以有多个默认属性,但这些默认属性必须具有相同的名称.

一个例子:

    property Item[const Coordinate: TPoint]: TSlice read GetSlice write SetSlice; default;
    property Item[x,y: integer]: TSlice read GetSlice write SetSlice; default; 
Run Code Online (Sandbox Code Playgroud)

您甚至可以让getter和setter共享相同的名称,只要它们具有该overload指令即可.

  • 由于我现在可以访问Delphi 7,我发现你不能在类中使用它来做多个默认属性. (2认同)