TSL语言基础 > Object TSL

索引器(index)    

  • 简单说来,所谓索引器就是一类特殊的属性,通过它们你就可以像引用数组一样引用自己的对象。索引器通常用于对象容器中为其内的对象提供友好的存取界面.

    显然,这一功能在创建集合类的场合特别有用,而在其他某些情况下,比如处理大型文件或者抽象某些有限资源等,能让类具有类似数组的行为当然也是非常有用的。

    索引器的定义方式为:
    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;