(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

相关文章

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

Python Pillow 库详解文档(最新推荐)

《PythonPillow库详解文档(最新推荐)》Pillow是Python中最流行的图像处理库,它是PythonImagingLibrary(PIL)的现代分支和继承者,本文给大家介绍Pytho... 目录python Pillow 库详解文档简介安装核心模块架构Image 模块 - 核心图像处理基本导入

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor