简单说来,所谓索引器就是一类特殊的属性,通过它们你就可以像引用数组一样引用自己的对象。索引器通常用于对象容器中为其内的对象提供友好的存取界面.
显然,这一功能在创建集合类的场合特别有用,而在其他某些情况下,比如处理大型文件或者抽象某些有限资源等,能让类具有类似数组的行为当然也是非常有用的。
索引器的定义方式为:
Property PropertyName Index IndexValue read ReadMethod write WriteMethod
与属性不同的是,其中读写限定符必须是方法,不能是字段。而且
读限定符中的方法声明必须带有一个参数,这个参数指向索引器的索引。
写限定符的方法声明必须带有2个参数,第一个参数是索引器的索引,第二个是要设置的值。
与数组的区别,调用索引器的时候用圆括号,不能用方括号。
与Object pascal不同的地方:TSL的索引器的索引值除了支持整数以外,还可以支持字符串。
实例:
program test;
type A=class()
arr;
function create()
Begin
arr:=array();
End;
function rIndex(i);
Begin
return arr[i];
End;
function wIndex(i,value);
Begin
arr[i]:=value;
End;
property idx read rindex write windex;
End;
begin
AA:=createobject("A");
AA.idx(0):="abc";
writeln(AA.idx(0));
End.
上面的示例演示了索引器的使用方法。对类A的数据arr的操作,不必通过对象AA.arr来设置或读取,只要通过索引器即可。索引器为A中的数据提供友好的存取界面。
我们可以把索引器的一个索引固定为属性,就需要下面的定义方法:
Property PropertyName Index IndexValue read ReadMethod write WriteMethod
用index n指定索引的位置
上例中可声明
property idx0 index 0 read rindex write windex;
表示idx0表示专门对索引器中的位置 0进行对写,也就是对arr[0]进行操作。
当然,假使有需要,索引也可以使字符串,那样,例如:
property idx0 index "High school" read rindex write windex;