1.当外部执行
var a : TCanvas ;
...
{1} a := TGraphicControl_obj.Canvas ;
对象将把FCanvas 赋给a ,成为read;
2.为什么不write?
决定于程序要做什么,没有write意味着该属性是只读的,即
{2} TGraphicControl_obj.Canvas := a ; 将出错
3.只所以要用property ,而不直接使用内部变量,是为了屏蔽内部实现细节,详细
请见4
4.完增用法是
property p : read read_function write write_function ;
当类似语句{1}执行时,要求获得p的值时,将执行read_function,由该函数
产生的结果作为p的值时.
当类似语句{2}执行时,要求给p值时,将执行write_function,
这样,通过给属性赋值,将导致一个动作,这个是给一般变量赋值所不能的。
比如
class air_condition {空调机}
{
needtempl: integer write do_adapt_templ;
procedure do_adapt_templ(needtempl:integer);
}
procedure do_adapt_templ(needtempl:integer);
{
if needtempl < currtempl then
制冷;风扇;...
esle
加热;
}
这样,当有人要调整室内温度时,只要
ac_obj .needtempl := newtempl ;
用户不知道它内部要调整风扇,要...的
通过函数当然叶可以,但没有这种方式来得直观