• 理解 Delphi 的类(十二) 深入属性[1]



    本文转自万一老师的博客
    原文地址: http://www.cnblogs.com/del/archive/2008/01/18/1044301.html

    //
    关于属性的话题还有很多, 譬如: 数组属性、默认属性、class 属性等等.
    //
    先总结一下前面提到过的属性吧.
    --------------------------------------------------------------------------------
     
    TMyClass = class(TObject)
      private
        FName: string;
        procedure SetName(const Value: string);
      published
        property Name: string read FName write SetName;
      end;
    --------------------------------------------------------------------------------
    //1
    、属性用 property 定义;

    //2
    readwrite 两个关键字至少要存在一个, 如果只有一个就成了只读属性或只写属性;

    //3
    、属性名后面也要指定类型(必须是内置类型或定义在前面的类型), 存取的类型必须要和它一致;

    //4
    、属性用到的字段与方法一定要声明在属性前面;

    //5
    、如果属性读(read)的是方法, 那么这个方法一定是个函数, 且返回值与属性类型一致;
    //  
    如果属性是非数组属性, 该函数是无参数的, 譬如: function GetName: string;

    //6
    、如果属性写(write)的是方法(一般也不会是字段), 那么这个方法一定是个过程;
    //  
    如果属性是非数组属性, 该过程必须只有一个参数, 参数类型必须和属性一致; 并且参数必须是传值的;
    //  
    譬如: procedure SetName(s: string); 或者 procedure SetName(const s: string);

    //7
    、属性调用的方法不能是虚方法或动态方法; 不能是重载方法;

    //8
    、如果属性在 published , 那它调用的方法只能使用默认的 register 调用约定;

    //9
    、属性一般放在 published , 如果属性不是公开的也就失去了属性的意义;

    //10
    、如果自定义的类不需要 RTTI 或许把属性放到 public 区会更节省(个人认为);

    //11
    、属性读写的变量或方法一般放在 private , 如果都公开了就用不着属性了;

    //12
    、事件属性读写的必须是方法, 不能是变量;

    //13
    、属性只是一个桥, 它没有指针(它读写的变量和方法才有指针), 目的是方便存取并提出存取限制;

    //14
    、还有 Delphi IDE 为书写属性提供了非常方便的快捷键, 譬如:
    //   
    输入: property Name: string; 然后执行 Ctrl+Shift+C ... !

    //  
    属性是个奇妙的创意, 读写属性就像读写结构一样方便; 但属性的规矩好多啊, 但这还只是一般属性的法则.

  • 相关阅读:
    优美的回文串--全国模拟(二)
    创造新世界--全国模拟(二)
    字符串分类--全国模拟(二)
    平衡数--全国模拟(二)
    最小矩形--全国模拟(二)
    组装三角形--全国模拟(二)
    深入.NET内测题
    面向对象七大设计原则
    创建数据库普通临时表和创建数据库全局变量表和俩者的区别
    使用变量 数据类型转换 逻辑控制语句(begin ...end; case...end; if...else; while)
  • 原文地址:https://www.cnblogs.com/w413133157/p/1730836.html
Copyright © 2020-2023  润新知