在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
先总结一下前面提到过的属性吧. TMyClass = class(TObject) private FName: string; procedure SetName(const Value: string); published property Name: string read FName write SetName; end;1、属性用 property 定义; 2、read、write 两个关键字至少要存在一个, 如果只有一个就成了只读属性或只写属性; 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 ... 哇! ---属性是个奇妙的创意, 读写属性就像读写结构一样方便; 但属性的规矩好多啊, 但这还只是一般属性的法则. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论