属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。
语法: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