Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何实现索引[]默认属性_Delphi_Class - Fatal编程技术网

Delphi 如何实现索引[]默认属性

Delphi 如何实现索引[]默认属性,delphi,class,Delphi,Class,我有一个类,它在TStringList中保存多个文件名。我可以使用以下方法通过索引访问特定文件名: myclass.stringlistclass[index] 但是如何使用以下语法获取文件名 myclass[index] 是否有可以实现此功能的属性?在索引属性上使用“default”关键字。每个类可以有一个默认属性 每个类可以有多个默认属性,但是这些默认属性必须具有相同的名称 例如: property Item[const Coordinate: TPoint]: TSlice r

我有一个类,它在TStringList中保存多个文件名。我可以使用以下方法通过索引访问特定文件名:

myclass.stringlistclass[index]
但是如何使用以下语法获取文件名

myclass[index]
是否有可以实现此功能的属性?

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

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

例如:

    property Item[const Coordinate: TPoint]: TSlice read GetSlice write SetSlice; default;
    property Item[x,y: integer]: TSlice read GetSlice write SetSlice; default; 
您甚至可以让getter和setter共享相同的名称,只要它们具有
重载
指令

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;
这意味着:

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

您还需要使用
getfilescont
method@teran根据代码逻辑,为不存在的索引返回空值是可以接受的。@EugeneMayevski'EldoSCorp事实上,我已经做到了这一点,如果索引不存在,则传递空字符串。非常漂亮和强大的用法实际上,每个类可以有多个
default
属性@阿夫拉齐尔:这是语言中最近增加的东西吗?以前似乎只有一个默认属性。我的个人Hg回购协议可以追溯到2008年4月w/Delphi 2006,里面有工作代码。代码本身比较旧——我很确定它与Delphi2005一起工作。我不确定它能追溯到什么时候,我只为我的遗留项目安装了Delphi 2007。因为我现在可以访问Delphi 7,我发现你不能用它在一个类中创建多个默认属性。