【无标题】(delphi11最新学习资料) Object Pascal 学习笔记---第5章第3节(self关键字)

这篇具有很好参考价值的文章主要介绍了【无标题】(delphi11最新学习资料) Object Pascal 学习笔记---第5章第3节(self关键字)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

5.3.1 Self:记录背后的魔法

​ 假设您有两个记录,如MyRec1MyRec2,它们属于相同的记录类型。当调用一个方法并执行其代码时,该方法如何知道它使用这两个记录中的哪一个?当您定义一个方法时,编译器在幕后向方法添加一个隐藏的参数,即对您应用该方法的记录的引用。

​ 换句话说,对方法的上述调用被编译器转换为以下伪代码:

// 您编写的代码
MyRec.SetValue('Hello');
// 编译器生成的代码
SetValue(@MyRec, 'Hello');

​ 在这个伪代码中,@是地址运算符,用于获取记录实例的内存位置。

小贴士: 地址运算符在本章的高级部分末尾简要介绍了一下,标题为“指针是怎么样的?”

​ 调用代码是这样翻译的,但实际方法调用如何引用和使用这个隐藏参数呢?通过隐式使用一个名为 Self 的特殊标识符。因此,该方法的代码可以写成:

procedure TMyRecord.SetValue(NewString: string);
begin
  Self.FName := NewString;
end;

​ 虽然这段代码可以编译,但显式地使用 Self 并没有什么意义,除非你需要将记录作为一个整体来引用,例如将记录作为参数传递给另一个函数。这种情况更经常发生在类中,因为这些类的方法具有相同的隐藏参数和相同的 Self 标识符。

​ 使用显式 Self 参数可以使代码更可读(即使不是必需的)的一种情况是,当你在操作第二个相同类型的数据结构时,如同类型的第二个数据结构时,如测试另一个实例的值:

function TMyRecord.IsSameName(ARecord: TMyRecord): Boolean;
begin
  Result := Self.FName = ARecord.FName;
end;

小贴士: “隐藏的”Self参数在C++和Java中称为this,但在Objective-C(以及Object Pascal中)中称为Self文章来源地址https://www.toymoban.com/news/detail-829248.html

到了这里,关于【无标题】(delphi11最新学习资料) Object Pascal 学习笔记---第5章第3节(self关键字)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • zkrollup学习资料汇总

    FluiDex FluiDex Labs 致力于构建下一代专业的去中心化交易所。我们将在以太坊上使用 PLONK 零知识证明技术,开发高性能的订单簿数字资产现货交易所。 zksync: 最完整的 ZK-Rollup 开源项目代码,涵盖了一个 ZK-Rollup 系统需要的每个组件。使用 PLONK 机制,电路代码使用 bellman,链下

    2024年02月12日
    浏览(48)
  • 0.flink学习资料

    (1)google dataflow model 下载链接:p1792-Akidau.pdf (vldb.org) Akidau T, Bradshaw R, Chambers C, et al. The dataflow model: a practical approach to balancing correctness, latency, and cost in massive-scale, unbounded, out-of-order data processing[J]. Proceedings of the VLDB Endowment, 2015, 8(12): 1792-1803 流式计算的基石文档,google出品

    2024年02月12日
    浏览(50)
  • 以太坊入门学习资料

    区块链按照访问和管理权限分为公有链、联盟链和私有链。 公有链:完全开放,所有节点均可加入,代表链-比特币Bitcoin、以太坊Ethereum。 联盟链:有多个组织和机构共同管理,获得组织和机构许可的节点可以加入,代表链-超级账本Hyperledger Fabric。 私有链:获得集中管理者

    2024年02月02日
    浏览(56)
  • 机器学习 深度学习资料 资源machine learning

    Kaggle入门,看这一篇就够了 - 知乎 (zhihu.com) https://zhuanlan.zhihu.com/p/25686876 day1-1.什么是机器学习_哔哩哔哩_bilibili day1-1.什么是机器学习是10天学会机器学习从入门到深度学习的第1集视频,该合集共计62集,视频收藏或关注UP主,及时了解更多相关视频内容。 https://www.bilibili.com

    2024年02月21日
    浏览(52)
  • linux存储技术学习资料

    https://www.cnblogs.com/pengdonglin137/p/16525428.html Linux内核的I/O栈大图 知乎Linux I/O专栏1 Linux 块设备之Block Layer层架构演变 Linux VFS机制简析(一) Linux VFS机制简析(二) Linux Kernel文件系统写I/O流程代码分析(一) Linux Kernel文件系统写I/O流程代码分析(二)bdi_writeback linux问题调查工具

    2024年02月06日
    浏览(56)
  • DPDK相关学习资料汇总

    经常有新报道的童鞋问我,学习DPDK有哪些资料或者书籍可以看,今天我先来汇总一波,后面会持续更新: 1. DPDK官方网站:https://www.dpdk.org/和http://core.dpdk.org/doc/,官方网站提供DPDK的最新版本代码、文档和实例程序下载,同时也发布DPDK的最新版本更新和重大改进。 2. DPDK Git

    2024年02月08日
    浏览(62)
  • 小程序的学习资料收集

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1476434677599 3:设计指南:https://mp.weixin.qq.com/debug/wxadoc/design/index.html 4:设计资源下载:https://mp.weixin.qq.com/debug/wxadoc/design/#资源下载 5:微信小程序公测接入指南:http://

    2024年02月08日
    浏览(50)
  • 空间分析专属 Python 学习资料

    空间数据分析能够帮助我们更好地理解地理空间中的模式和关系,从而为决策提供支持。例如,城市规划者可以使用空间数据分析来确定城市发展的最佳方向,环境科学家可以使用空间数据分析来评估污染的影响,而商业分析师可以使用空间数据分析来确定最佳的商业区位。

    2024年02月12日
    浏览(42)
  • MPI学习网站和资料

    1. MPI 文档 (1)https://rookiehpc.org/mpi/docs/index.html (2)Open MPI v4.1.6 documentation 2. MPI练习题 (1)MPI Exercises (2)Tutorials · MPI Tutorial 3. 推荐书籍 Parallel Programming with MPI Using MPI - 3rd Edition Using Advanced MPI - 1st Edition 高性能计算之并行编程技术—— MPI并行程序设计

    2024年01月22日
    浏览(76)
  • 学习C++资料集合

    适合学生学习时能够方便的在浏览器里直接编c++程序 黑马机器人—C++ 鸡啄米:C++编程入门系列之目录和总结 ++98基础上学习C++11新特性 Effective Modern C++ C++ 入门教程 鱼C工作室 C++快速入门 C++ Primer 5 代码 C++设计成这样的原因 《C++演化和设计》 boost库学习 C++17 High Performance C++

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包