设为首页收藏本站

Delphi乐园 开发者的家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2125|回复: 2

Delphi属性——Property [复制链接]

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2014-4-23 19:02:09
  • 签到天数: 42 天

    [LV.5]常住居民I

    金钱
    67776
    13436
    0
    在线时间
    25 小时
    阅读权限
    10
    精华
    0
    积分
    0
    UID
    2050
    发表于 2013-6-16 11:38:18 |显示全部楼层
    分享到:
    定义一个属性Property的基本格式如下:
    property 属性名 : 属性值类型 read 属性读函数/属性值变量 write 属性写函数/属性值变量

    这里简单解释一下:
    1。Property是属性定义关键字。

    2。属性的特征类似于字段,所以属性名就像字段名,属性值类型就像字段的值类型

    3。属性读函数,是属性被“读取”时所执行的操作,这样在执行“取值”操作时,具备了执行其他动作的可能。
    另外,属性值变量,可以是Property所在类能够访问的任何变量,如果使用了属性值变量,则相当于属性值直接从值变量中获取,这和直接赋值是没有什么差别的

    4。属性写函数,是属性被“写入”时所执行的操作,这样在执行属性“赋值”操作时,具备了执行其他动作的可能。比如:写入edt的Text属性时,窗口会同时执行界面更新操作。
    另外,属性值变量和3中所述类似,如果使用了,就相当于将传来的属性值直接赋值到对应的属性值变量

    这里的函数是真正的函数,不像C#中那样的getter和setter,所以会有些难以理解。

    5。属性读函数的函数声明:
    function 读函数名: 属性值类型;

    其中读函数名可以自定义,只要和属性声明中一样即可,该函数的返回值就是读属性操作时实际获取的值。

    6。属性写函数声明(其实是一个子函数):
    procedure 写函数名(value : 属性值类型)

    其中写函数名可以自定义,只要和属性声明中一样即可,该函数参数value,就是对属性赋值时传递过来的实际值。

    7。读函数和写函数必须设置一个,如果只设置读函数,而没有设置写函数(同时去掉write关键字),这样的属性就是只读属性,同理也可以设置只写属性

    8。为了保证属性公开性的同时掩盖读写函数的可见性,可以将读写函数设置为私有,而将属性设置为共有,这样可以避免将读写函数本身暴露给调用者,否则就不太拉风了。

    举例:

    TxKernelSearchThread = class(TThread)
       private
        keyword_list: TStringList;
         procedure SetKeyword(value: UnicodeString);
       public
        property Kerword:UnicodeString write SetKeyword;
        。。。
    end;

    procedure TxKernelSearchThread.SetKeyword(value: UnicodeString);
    begin
    if value = '' then Exit;
    ExtractStrings([' '],[' '],PWideChar(value),Self.keyword_list);
    end;

    上面是一个只写属性的例子。

    属性的一个很重要的应用就是VCL中的控件属性,以及事件属性等,这也就解释了为什么向文本框的Text属性赋值,会更新界面操作,这正是因为属性将字段和函数的特征结合了起来。


    啊啊啊啊啊啊啊啊啊啊啊
    您需要登录后才可以回帖 登录 | 立即注册

    空间、域名、优惠稳定。香港空间1元,美国2元。

    手机版|Delphi乐园 ( 冀ICP备11023363号-7 )    

    GMT+8, 2016-10-23 02:18

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    公网安备 14090202000504号

    回顶部