你应该使用:
property ThumbnailWidth: integer read FThumbnailWidth
write FThumbnailWidth default 170;
property ThumbnailHeight: integer read FThumbnailHeight
write FThumbnailHeight default 120;
或
property ThumbnailHeight: Integer read GetThumbnailHeight
write SetThumbnailHeight;
property ThumbnailWidth: Integer read GetThumbnailWidth
write SetThumbnailWidth;
两种方式都可以吗?
答案 0 :(得分:4)
这取决于。 : - )
如果不需要副作用,您有时可以直接访问私有变量,就像在第一个样本中一样。
通常,在属性值更改时还需要执行其他操作,例如更新屏幕,执行计算,更改其他内部值等等。在这种情况下,需要getter
和setter
(Delphi中的read
和write
方法。
我更喜欢在大多数时间使用这些方法,因为Delphi会从组件用户隐藏它们。很多时候,他们只是直接访问内部值而没有其他影响,但如果我需要稍后更改,那么可以做的事情就更少了。
使用这些方法也有其他用途。如果您需要更改其他属性,有时您需要触发(或避免)他们所拥有的副作用,您可以通过访问published
属性(例如ThumbnailHeight
当您更改缩略图宽度以保持比例,并需要更新显示时),或者在您不改变时访问内部字段(通过直接使用内部FThumbnailHeight
)。
请参阅文档中的Defining Properties,了解Direct Access和Access Methods之间的差异(虽然后者不会向第一个添加太多信息,但有几个链接到那里读/写方法)。