TSL语言基础 > Object TSL > 函数信息

TSLObjects    

简述
获取当前运行环境下所有对象的信息。
目前仅下一代服务器与两个客户端本地解析器中支持。
定义
TSLObjects(Type:Boolean):array
参数
名称类型说明
TypeBoolean是否获取原对象。当Type为False,仅获取对象的引用计数;当Type为True时,除了会获取对象的引用计数外,还会获取对象本身。 注:不支持获取二进制对象信息,如天软内置对象TstringList、ThashedStringList等。
返回值Array,TableArray数组,对象信息集合。每一行都是同类对象的信息集合,行下标即为该对象类名,其中每一单元格格式如下:
行标说明备注
refs整数类型,对象的直接引用计数只新一代语言中有该返回
orefs整数类型,对象的间接引用计数
obj对象类型,原对象当Type为True时,返回值中才有该字段
注:只有当对象的直接引用和间接引用都为0时,该对象才会被销毁。 直接引用:允许直接使用对象的引用访问属性和方法,不需要额外的引用变量。 间接引用:将对象的引用通过某种方式(如findFunction等)赋值给其他引用变量,再通过该引用变量访问其属性或方法。
  • 范例

    现有类TestClass01,其代码如下:
    type TestClass01=class()
    value;
    function create(_value)
      begin
    value:=_value;
    end
    class function add(x,y)
    begin
    if ifnumber(x) and ifnumber(y) then
    return x+y;
    else
    return 0;
    end
    end

    范例01:获取当前运行环境下所有对象的引用计数信息
    //创建对象,初始引用个数均为1
    objA:=new TestClass01(100);//objA-直接引用:1,间接引用:1
    //将对象赋值给其它变量,增加objA的直接引用数
    objC:=objA;//objA-直接引用:2,间接引用:1
    objB:=new TestClass01(101);//objB-直接引用:1,间接引用:1
    //通过对象查找类中的方法,增加objB的间接引用
    funcA:=findfunction("add",objB);//objB-直接引用:1,间接引用:2
    funcB:=findfunction("add",objB);//objB-直接引用:1,间接引用:3
    //通过类名查找类中的方法,没有引用对象,已有对象引用数不变
    funcC:=findfunction("add",class(TestClass01));
    return TSLObjects(0);

    //结果:


    范例02:获取当前运行环境下所有对象信息以及原对象,并通过该结果访问其属性、方法
      objA:=new TestClass01(100);
      objB:=new TestClass01(101);
    objsInfo:=TSLObjects(1);
      newObjA:=objsInfo["TestClass01"][1,"obj"];
    newObjB:=objsInfo["TestClass01"][0,"obj"];
    //获取到的对象,其属性和方法与先前直接创建出的对象一致
      v1:=newObjA.value;
      v2:=newObjB.value;
      t1:=newObjA.add(1,2);
      t2:=newObjB.add(3,4);
      return array(v1,v2,t1,t2);

    //结果:
相关