对应于
Rectangle.SetCoordinate(2, Rectangle.GetCoordinate(0) + 100);
- 111 -
Classes and objects
Storage specifiers(存储限定符)
可选指示字stored、default和nodefault被称为存储限定符,它们对程序的行为没有影响,但决定了RTTI的维护方式,它们决定是否把公布属性的值存储到窗体文件中。
stored指示字后面必须跟True、False、Boolean类型的字段名或者一个返回Boolean值的无参数方法。比如,
property Name: TComponentName read FName write SetName stored False; 若一个属性没有stored指示字,就相当于指定了stored True。
default指示字后面必须跟随一个和属性具有相同类型的常量,比如,
property Tag: Longint read FTag write FTag default 0;
要覆盖一个继承下来的默认值而不指定新值,使用nodefault指示字。default和nodefault只支持有序类型和集合类型(当它的基础类型是有序类型,并且上下边界都在0到31之间时)。若声明属性时没有使用default或者nodefault,它被当作nodefault看待。对于实数、指针和字符串,它们分别有隐含的默认值0、nil和 ' '(空串)
当保存一个组件的状态时,组件中公布属性的存储限定符会被检查,若属性的当前值和默认值不同(或没有默认值),并且stored为True,则它的值就会被保存;否则,属性的值不被保存。
注意:存储限定符不支持数组属性。在声明数组属性时,指示字default有不同的意义。
Property overrides and redeclarations(属性的覆盖和重新声明)声明时没有指定类型的属性称为属性覆盖,它允许你改变一个属性继承下来的可见性或限定符。最简单的覆盖只包含关键字property、并在后面跟属性标志符,这种方式用来改变属性的可见性。比如,祖先类声明了一个受保护的属性,派生类可以重新声明它为公有的或公布的。属性覆盖可包含read、
stored、default和nodefault,它们覆盖了继承下来的相应指示字。覆盖可以取代访问限定符、添加限定符或增大属性的可见性,但不能删除访问限定符或降低可见性。覆盖可包含implements指示字,可以实现的接口,但不能删除继承下来的那些。
下面的声明演示了属性覆盖的使用:
type
TAncestor = class
...
protected
property Size: Integer read FSize;
property Text: string read GetText write SetText;
property Color: TColor read FColor write SetColor stored False;
...
end;
type
TDerived = class(TAncestor)
...
protected
property Size write SetSize;
published
property Text;
property Color stored True default clBlue;
...
- 112 - write、它添加
Classes and objects
end;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-83.html
这就是报应
早安