read/write是什么意思?(50分)

  • 主题发起人 主题发起人 luckystar
  • 开始时间 开始时间
L

luckystar

Unregistered / Unconfirmed
GUEST, unregistred user!
以前也写过控件,对read和write的理解比较肤浅,认为就是用来与属性编辑
器进行交互的。。。手上没什么资料

请告诉我read/write的正确理解好吗

 
read xxx write xxxx
访问属性时,若读则用或执行xxx
若写执行xxxx
 
我就是搞不懂,write是写private域里的属性,那read是读这个属性,是谁在读?怎么读?

一段vcl源码:

TGraphicControl = class(TControl)
private
FCanvas: TCanvas;
。。。。。;
protected
procedure Paint; virtual;
property Canvas: TCanvas read FCanvas;
public
。。。。。;
end;
这里的 property Canvas: TCanvas read FCanvas是谁在读谁?为什么不write?

最近比较晕。。。
 
请帮帮忙
 
var Graphic:TGraphicControl ;

Graphic.Canvas;
|
TGraphicControl.Canvas
|
TGraphicControl.FCanvas


>>property Canvas: TCanvas read FCanvas是谁在读谁?为什么不write?
Readonly , 所以不用write.查看帮助,你就可以看到它是只读的
--------
 
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 ;
用户不知道它内部要调整风扇,要...的

通过函数当然叶可以,但没有这种方式来得直观





 
看过有关资料,但介绍的也不详细!只知 Read <标识符1> Write <标识符2>
标识符1是可读的!但是,是如何read?怎么Read?它与我们所定义的过程,函数的差别
是如何的?它又有哪些作用和功能?
不知哪里有相关的资料来详细说明?我这的新华书店有关Delphi的书都翻遍了,但都
无此说明?!!!
 
多人接受答案了。
 
后退
顶部