(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

相关文章

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

深度解析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.函数返回的

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

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 模块 - 核心图像处理基本导入

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

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

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

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

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