文件名称:存储与装载属性-gb∕t 21050-2019 信息安全技术 网络交换机安全技术要求
文件大小:1.19MB
文件格式:PDF
更新时间:2024-06-29 06:59:40
Delphi 组件
3.7 为接口创建属性 可以把接口用作已发布属性的值,几乎就象你可以使用对象一样。但是,组件从接口的 实现接收通告的机制不同。在前面的主题中,属性设定函数调用被作为属性值分派的组件的 FreeNotification 方法。这允许当作为属性值的组件被释放时组件更新自身。但是,当属性值 是接口时,就不能对实现接口的组件进行访问。结果,不能调用它的 FreeNotification 方法。 要处理这个情况,可以调用组件的 ReferenceInterface 方法: procedure TDemoComponent.SetMyIntfProp(const Value: IMyInterface); begin ReferenceInterface(FIntfField, opRemove); FIntfField := Value; ReferenceInterface(FIntfField, opInsert); end; 用指定的接口调用 ReferenceInterface 完成的工作与调用另一组件的 FreeNotification 方 法一样。因此,从属性设定函数中调用 ReferenceInterface 以后,可以重载 Notification 方法, 处理从接口的实现来的通告: procedure TDemoComponent.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); if (Assigned(MyIntfProp)) and (AComponent.IsImplementorOf(MyIntfProp)) then MyIntfProp := nil; end; 注意,Notification 代码给 MyIntfProp 属性赋值 nil,不给 private 域(TIntfField)赋 nil 值。 这确保 Notification 调用属性设定函数,当属性值在前面已被设定时,这个设定函数调用 ReferenceInterface 来删除已经建立的通告请求。所有对接口属性的赋值必须通过属性设定函 数进行。 3.8 存储与装载属性 Delphi 在窗体文件 (在 VCL 应用程序中为.dfm,在 CLX 应用程序中为.xfm) 中保存窗 体及其组件。窗体文件保存窗体及其组件的属性。当 Delphi 开发人员给其窗体添加你编写 的组件时,你的组件必须具有在保存时把自己的属性写入窗体文件的能力。类似地,当组件 被装载进 Delphi 或者作为应用程序的一部分被执行时,组件必须从窗体文件中恢复自己。 大部分时间,使你的组件与窗体一起工作,你不需要做任何事情,因为保存(对组件的) 描述和从描述中装载的能力是组件所继承行为的一部分。但是,有时你可能想改变组件保存 自己的方法,或者想改变在装载时初始化的方法,因此,应该了解底层的机制。