TSL语言基础 > 高级语言(新一代) > 对象对基础算符与基础函数的重载 > TSL对象支持对二进制函数的重载 > 对象中对二进制函数重载的应用

1、范例:类TsDate-对整数日期的扩展    

  • 如下所示,类TsDate对天软日期的一些常用方法进行了重载,使得整数日期可直接调用这些方法。
    td:=new TsDate(20240329);
    echo "字符串日期","---->",DateToStr(td);
    echo "整数日期","---->",DateToInt(td);
    DecodeDate(td,year,month,day);
    echo "指定日期的年月日(成员方法)","---->","year:"$year," ","month:"$month," ","day:"$day;
    class(TsDate).DecodeDate(20240329,y,m,d);
    echo "指定日期的年月日(类方法)","---->","year:"$y," ","month:"$m," ","day:"$d;
    echo "所在年份","---->",YearOf(td);
    echo "所在月份","---->",MonthOf(td);
    echo "所在日","---->",DayOf(td);
    echo "所在年份的第一天","---->",StartOfTheYear(td);
    echo "所在年份的最后一天","---->",EndOfTheYear(td);
    echo "所在月份的第一天","---->",StartOfTheMonth(td);
    echo "所在月份的最后一天","---->",EndOfTheMonth(td);
    echo "所在周的第一天","---->",StartOfTheWeek(td);
    echo "所在周的最后一天","---->",EndOfTheWeek(td);
    echo "向前推移5年","---->",IncYear(td,-5);
    echo "向前推移5月","---->",IncMonth(td,-5);
    echo "向前推移5天","---->",IncDay(td,-5);

    其中,类TsDate实现代码如下:
    type TsDate=class
      Ftd;
      function create(td)
      begin
        Ftd:=Init(td);
      end
      function operator DateToStr()
      begin
        return ::DateToStr(Ftd);
      end
      function operator DateToInt()
      begin
        return ::DateToInt(Ftd);
      end
      function operator YearOf()
      begin
        return ::YearOf(Ftd);
      end
      function operator MonthOf()
      begin
        return ::MonthOf(Ftd);
      end
      function operator DayOf()
      begin
        return ::DayOf(Ftd);
      end
      class function operator DecodeDate(td,year,month,day)
      begin
        v:=ifObj(td)?td.Ftd:Init(td);
        return ::DecodeDate(v,year,month,day);
      end
      function operator StartOfTheYear()
      begin
        return ::DateToInt(::StartOfTheYear(Ftd));
      end
      function operator EndOfTheYear()
      begin
        return ::DateToInt(::EndOfTheYear(Ftd));
      end
      function operator StartOfTheMonth()
      begin
        return ::DateToInt(::StartOfTheMonth(Ftd));
      end
      function operator EndOfTheMonth()
      begin
        return ::DateToInt(::EndOfTheMonth(Ftd));
      end
      function operator StartOfTheWeek()
      begin
        return ::DateToInt(::StartOfTheWeek(Ftd));
      end
      function operator EndOfTheWeek()
      begin
        return ::DateToInt(::EndOfTheWeek(Ftd));
      end
      function operator IncYear(y)
      begin
        return ::DateToInt(::IncYear(Ftd,y));
      end
      function operator IncMonth(m)
      begin
        return ::DateToInt(::IncMonth(Ftd,m));
      end
      function operator IncDay(d)
      begin
        return ::DateToInt(::IncDay(Ftd,d));
      end
      class function Init(td)
      begin
        return ifstring(td)?StrToDate(td):((td>=0 and td<=99991231T)?td:IntToDate(td));
      end
    end

    运行结果如下: