TSL语言基础 > Object TSL

属性Property    

  • 属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。
    语法:Property PropertyName[(ParamList)] [read fieldOrMethod][write fieldOrMethod][Index IndexValue]

    其中,
    1、关键字 Property 关键字表示开始声明了一个属性;
    2、PropertyName是自定义合法的属性名,可以带参数,写法如PropertyName(a,b);
    3、每个属性至少有一个读限定符或一个写限定符,或两者都有,它们称为访问限定符,具有以下的格式:
    read fieldOrMethod
    write fieldOrMethod
    fieldOrMethod可以是成员变量,也可以是成员方法。

    4、在TSL.INI支持,一旦设定该选项为1,则任何域的property都可被访问,无论是public还是protected,private。默认情况下这种违反规则是不被允许的。
    [Compatible]
    PrivatePropertyAccess=1

    5、属性可以具有Private,Protected或public可见性,默认为public.
    6、如果单有读限定符,表示属性只读;如果单有写限定符,表示属性只写。
    7、如果它是在祖先类中声明的,则它对派生类必须是可见的,则fieldOrMethod不能是私有的字段或方法;
    8、在读限定符中,若fieldOrMethod 是一个方法,它须是一个小于等于定义中参数数量的函数
    9、在写限定符中,若fieldOrMethod 是一个方法,属性的设置值会以参数方式送入成员方法,即它须是一个与定义中参数数量多一个的方法。
    10、属性可以在派生类中给重新定义.
    示例:
    program test;

    Type myDate = Class
      private
      _year;
      _month;
      _day;
      Function SetMonth(value);
      Begin
        if value>0 and value<13 then
          _month:=value;
      End;

      public
      //不带参数的定义
      property Month read _month write setMonth;//读时访问成员变量_month,写时调用成员方法setMonth
      //带参数的定义
      property DateV(y,m) read getDateV write setDateV;
      
      Function getDateV();
      begin
        return _year*10000+_month*100+_day;
      end;
      Function setDateV(y,m,d); //比定义中多一个参数
      begin
        _year:=y;
        SetMonth(m);
        _day:=d;
      end;
    End;

    Begin
      D:=CreateObject("myDate");
      D.Month:=7; //写
      echo D.Month;//读
      D.DateV(2025,8):=10;//写
      echo D.DateV();//读
    End.

    打印结果:
    7
    20250810