(delphi11最新学习资料) Object Pascal 学习笔记---第11章第2节 ( 接口的委托)

2024-05-10 09:52

本文主要是介绍(delphi11最新学习资料) Object Pascal 学习笔记---第11章第2节 ( 接口的委托),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

11.2.2 接口的委托

​ 我用类似的方式定义了一个简单类实现IJumper接口:

TJumperImpl = class(TAggregatedObject, IJumper)
privateFPos: Integer;
publicfunction Jump: string;function Walk: string;procedure SetPos(Value: Integer);function GetPos: Integer;
end;

​ 这个类的实现与之前的不同之处在于使用了一个特殊的基类TAggregatedObject。这是一个特定目的类,用于定义内部一个内部对象支持接口,我稍后将展示其语法。
​ TAggregatedObject 类是 System 单元中定义的 IInterface 接口的另一种实现。与 TInterfacedObject 类相比,它在引用计数的实现(基本上是将所有引用计数委托给容器或控制器)和接口查询的实现(如果容器支持多个接口)方面有所不同。

注解 TAggregatedObject 类是 System 单元中定义的 IInterface 的另一种实现。与 TInterfacedObject 相比,它在引用计数实现(基本上将所有引用计数委托给容器或控制器)和接口查询实现(如果容器支持多个接口的情况下)方面存在差异。

​ 我将以一个不同的方式使用这个类。在下面的 TMyJumper 类中,我不想用类似的方法重复 IJumper 接口的实现。相反,我打算将该接口的实现委托给一个已经实现了该接口的类。这不能通过继承来实现(因为我们不能有两个基类);但是你可以使用Object Pascal语言的一个特殊功能:接口委托。下面的TMyJumper类通过属性去引用一个已经实现了接口的内部对象,从而就间接实现了 IJumper 接口,类本身并没有去实现该接口的实际方法:

TMyJumper = class(TInterfacedObject, IJumper)
privateFJumpImpl: TJumperImpl;
publicconstructor Create;destructor Destroy; override;property Jumper: TJumperImpl read FJumpImpl implements IJumper;
end;

​ 该类定义表明,TMyJumper 类通过 FJumpImpl 字段实现了 IJumper 接口。当然,该字段必须实际实现接口的所有方法。要接口委托起作用,需要在创建 TMyJumper 对象时为该字段创建一个合适的对象(构造函数参数是TAggregatedObject 基类所要求的):

constructor TMyJumper.Create;
beginFJumpImpl := TJumperImpl.Create(Self);
end;

​ 该类还有一个析构函数,用于释放内部对象,该对象是用普通字段而不是接口引用的(因为引用计数在这种情况下不起作用)。

​ 这个例子很简单,但一般来说,当你开始修改某些方法或添加其他方法时,这些方法仍将对内部FJumpImpl 对象的数据进行操作,情况就会变得更加复杂。这里的总体概念是,你可以在多个类中重复使用一个接口的实现。使用间接实现的接口的代码与标准代码完全相同:

procedure TForm1.Button2Click(Sender: TObject);
varIntf: IJumper;
beginIntf := TMyJumper.Create;Intf.Position := 0;Show(Intf.Walk);Show(Intf.Jump);Show(Intf.Walk);
end;

这篇关于(delphi11最新学习资料) Object Pascal 学习笔记---第11章第2节 ( 接口的委托)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976108

相关文章

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑

在 Windows 上安装 DeepSeek 的完整指南(最新推荐)

《在Windows上安装DeepSeek的完整指南(最新推荐)》在Windows上安装DeepSeek的完整指南,包括下载和安装Ollama、下载DeepSeekRXNUMX模型、运行Deep... 目录在www.chinasem.cn Windows 上安装 DeepSeek 的完整指南步骤 1:下载并安装

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最