(delphi11最新学习资料) Object Pascal 学习笔记---第10章第1节(通过引用设置属性)

本文主要是介绍(delphi11最新学习资料) Object Pascal 学习笔记---第10章第1节(通过引用设置属性),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

10.1.7 通过引用设置属性
本节讲述一个较少使用的语言功能,这节内容相当高级。如果你还没有使用Object Pascal 的经验,那么你可以跳过。但是,即使你已经熟练掌握了 Object Pascal,那么你也很可能从未听说过这项功能。当 Object Pascal 编译器被扩展为直接支持 Windows COM 编程时,它获得了处理 "Put by Ref "属性(COM 术语)的能力,或可以接收引用而不是值的属性的能力。

注意: "Put by ref "是 Chris Bensen 在介绍该功能的博文中给它起的名字:http://chrisbensen.blogspot.com/2008/04/delphi-put-by-ref-properties.html(当时 Chris 是 Delphi 的研发工程师)。

这是通过在 setter 方法中使用 var 参数来实现的。鉴于这可能会导致相当尴尬的情况,该功能(尽管仍是语言的一部分)很大程度上被视为例外而非语言规则,这也是该功能默认不激活的原因。换句话说,要启用该功能,必须使用以下编译器指令:
{$VARPROPSETTER ON}
如果不使用该指令,以下代码将无法编译,并会出现 "E2282 Property setters cannot take var parameters"(E2282 属性设置器不能接受 var 参数)的错误:
typeTMyIntegerClass = classprivateFNumber: Integer;function GetNumber: Integer;procedure SetNumber(var Value: Integer);publicproperty Number: Integer read GetNumber write SetNumber;end;

该类是 VarProp 示例的一部分。现在非常奇怪的是,你可以在属性设置函数中产生副作用:

procedure TMyIntegerClass.SetNumber(var Value: Integer);
beginInc(Value); // Side-effectFNumber := Value;
end;

另一个非常不寻常的情况是,你不能为属性分配一个常量值,只能分配一个变量(这应该是意料之中的,就像任何涉及通过引用传递参数的调用一样):

varMic: TMyIntegerClass;N: Integer;
begin...Mic.Number := 10; // Error: E2036 Variable requiredMic.Number := N;
虽然这不是你经常使用的一个功能,但这是思考属性相当高级的一种方式,它允许你初始化或改变给它赋值的变量的值。这就可能会导致像这样极其奇怪的代码:
N := 10;
Mic.Number := N;
Mic.Number := N;
Show(Mic.Number.ToString);
这两个连续的、完全相同的赋值看起来相当奇怪,但它们确实导致了意外后果,将实际数字变成了 12。这可能是获得该结果的最复杂、最无意义的方法!

这篇关于(delphi11最新学习资料) Object Pascal 学习笔记---第10章第1节(通过引用设置属性)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

PyCharm 接入 DeepSeek最新完整教程

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

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

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

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

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:下载并安装