(delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第1节(泛型键值对)

14.1.1 内联变量和泛型类型推断

​ 在声明泛型变量时,声明可能相当长。在创建该类型的对象时,必须重复相同的声明。除非您利用内联变量声明及其变量类型推断的能力。因此,上面最后一个代码片段可以写成:

beginvar Kvi := TKeyValue<Integer>.Create;try// ...finallyKvi.Free;end;

​ 在这个代码中,你不必两次重复完整的泛型类型声明。这在使用容器时特别方便,我们将在后面看到。

14.1.2 泛型类型的规则

​ 当你声明一个泛型类型的实例时,该类型会得到一个具体的版本,编译器会在所有后续操作中使用该版本。因此,如果你有一个泛型类,比如:

typeTSimpleGeneric<T> = classValue: T;end;

当你声明一个具体类型的对象时,你不能为 Value 字段指定不同的类型。鉴于以下两个对象,下面的一些赋值(TypeCompRules 示例的一部分)是不正确的:

varSg1: TSimpleGeneric<string>;Sg2: TSimpleGeneric<Integer>;
beginSg1 := TSimpleGeneric<string>.Create;Sg2 := TSimpleGeneric<Integer>.Create;Sg1.Value := 'Foo';Sg1.Value := 10; // 错误// E2010 不兼容的类型:“string”和“Integer”Sg2.Value := 'Foo'; // 错误// E2010 不兼容的类型:“Integer”和“string”Sg2.Value := 10;
end;

​ 一旦在泛型声明中定义了具体类型,编译器将强制执行对具体类型的检查,这符合Object Pascal等强类型语言的预期。对于泛型对象作为整体,也适用类型检查。当为对象指定泛型参数时,不能将一个不同且不兼容类型的相似泛型类型分配给它。如果这看起来令人困惑,下面的示例应该有助于澄清这个情况:

Sg1 := TSimpleGeneric<Integer>.Create; // 错误
// E2010 不兼容的类型:
// 'TSimpleGeneric<System.string>'
// 和 'TSimpleGeneric<System.Integer>'

​ 正如我们将在 "通用类型兼容性规则 "一节中看到的,在这种特殊情况下,类型兼容性规则是按结构而不是按类型名制定的。一旦声明了泛型类型,就不能再为其分配不同的、不兼容的类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 第 398 场周赛题解

Leetcode 第 398 场周赛题解 Leetcode 第 398 场周赛题解题目1&#xff1a;3151. 特殊数组 I思路代码复杂度分析 题目2&#xff1a;3152. 特殊数组 II思路代码复杂度分析 题目3&#xff1a;3153. 所有数对中数位不同之和思路代码复杂度分析 题目4&#xff1a;3154. 到达第 K 级…

辩证 逻辑学 | 洞察 事物矛盾及变化规律 在形式逻辑基础上 学会辩证思维(40节课)

课程下载&#xff1a;辩证逻辑学洞察事物矛盾及变化规律在形式逻辑基础上学会辩证思维&#xff08;40节课&#xff09;-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 在形式逻辑的基础上&#xff0c;学会 辩证思维 敏锐 洞察事物发展变化的规…

Linux命令篇(一):文件管理部分

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 1、cat命令常用参…

童趣盎然,米香四溢 —— 蒙自源六一儿童节特别献礼

充满欢声笑语的六一儿童节马上就要来了&#xff0c;在这个充满童真和喜悦的时刻&#xff0c;蒙自源米线品牌以一颗童心&#xff0c;为所有大朋友和小朋友准备了一份特别的礼物。 从5月25日开始&#xff0c;蒙自源诚挚邀请您和孩子们一同前往蒙自源旗下各大门店&#xff0c;品尝…

【MySQL数据库】MySQL 高可用搭建方案——MHA实战

MHA&#xff08;Master High Availability&#xff09; MHA实战 MHA&#xff08;Master High Availability&#xff09; 一、MHA简介二、MHA搭建准备要求&#xff1a;mha集群搭建&#xff0c;4台服务器&#xff0c;1主2从&#xff0c;1台mha2.1实验思路2.2实验准备 三、搭建MyS…

每日一题31:数据统计之即时配送食物

一、每日一题 配送表: Delivery -------------------------------------- | Column Name | Type | -------------------------------------- | delivery_id | int | | customer_id | int | | order_date …

HTML5常用标签表格

04-08、表格标签table 概述 表格&#xff1a;是一种行和列组合而成的单元格。一般应用于后台网页设计管理数据使用。 表格的架构部分&#xff1a; tabletable head 表格头 theadtable body - 表格体 tbodytable foot -表格的页脚 tfoot 表格的基本组成部分&#xff1a; t…

Bluetooth Profiles,蓝牙配置文件对应设备

下面的常量是蓝牙各种配置文件的标识符。 每个常量代表一个特定的蓝牙配置文件&#xff0c;这些配置文件定义了蓝牙设备之间通信的特定方式。以下是每个常量的解释&#xff1a; HEADSET (1): 代表耳机和免提配置文件&#xff0c;通常用于蓝牙耳机或车载免提系统。A2DP (2): 代…

opencv-python(三)

马赛克 face img[162:428,297:527] # 人脸坐标区域face face[::10,::10] # 每10个中取出一个像素&#xff0c;马赛克face np.repeat(face, 10, axis0) # 行方向重复10次face np.repeat(face, 10, axis1) # 列方向重复10次img[162:428,297:527] face[:266,:230] # 填充&a…

计算机科学与技术和软件工程专业有什么区别?应该怎么选?

计算机科学与技术和软件工程都是就业前景较好的计算机类专业&#xff0c;二者密切相关但侧重点不同&#xff0c;同学们应该如何选择呢&#xff1f; 一、学习内容 1.学科定位 ● 计算机科学与技术 侧重于计算机科学的理论研究和基础技术&#xff0c;包括算法、数据结构、人工…

lnmp平台部署web应用,安装Discuz社区平台详细文章——更新中

Nginx网站service 详细相关介绍-特点-http状态码-配置文件、将nginx添加永久环境变量 访问网站404是什么&#xff1f;_nginx 稳定版-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞33次&#xff0c;收藏24次。开源Web服务器软件。_nginx 稳定版https://blog.csdn.net/2301_771619…

数据结构--数组(详细分析)

目录 &#x1f349;引言 &#x1f349;数组 &#x1f348;数组的特性 &#x1f348;数组的优缺点 &#x1f34d;优点&#xff1a; &#x1f34d;缺点&#xff1a; &#x1f348;数组的声明与初始化 &#x1f348;数组的常见操作 &#x1f34d; 插入操作 &#x1f34d;…

Touch Camera PRO 2024 Easy Mobile Desktop Camera Controller(触控相机专业版)

一个真正易于使用的移动+台式摄像机控制器,具有视角切换功能! Touch Camera PRO 是一款非常易于使用的移动+桌面相机控制器,具有透视切换功能!它在 Home Designer、Runtime Level Editor 和 Floor Map Designer 等其他插件中使用! 在桌面和移动设备上工作! 一个干…

WIireShark使用教程

文章目录 目录 文章目录 一.入门抓包示例 一.入门抓包示例 先介绍一下如何使用wireshark抓取相应网卡的流量&#xff0c;让读者可以先上手操作感受一下抓包的具体过程。 1.打开wireshark的主界面如下 2.选择需要抓包的网卡&#xff0c;鼠标左键双击&#xff0c;即可抓取该网…

Mysql常见问题总结

1、MySQL初始化报错 mysqld --initialize --usermysql --console 2024-06-02T15:52:22.645557Z 0 [System] [MY-013169] [Server] D:\installSoft\mysql-8.0.21-winx64\bin\mysqld.exe (mysqld 8.0.21) initializing of server in progress as process 8980 2024-06-02T15:52:2…

02-2.3.2_1 单链表的插入和删除

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏&#xff0c;今后还会不断更新。 此外&#xff0c;《程序员必备技能》专栏和《程序员必备工具》专栏&#xff08;该专栏暂未开设&#xff09;日后会逐步更新&#xff0c; 插入 按位序插入 &#xff08;1&#xff09;带头结点 L…

量子加速超级计算简介

本文转载自&#xff1a;量子加速超级计算简介(2024年 3月 13日) By Mark Wolf https://developer.nvidia.cn/zh-cn/blog/an-introduction-to-quantum-accelerated-supercomputing/ 文章目录 一、概述二、量子计算机的构建块&#xff1a;QPU 和量子位三、量子计算硬件和算法四、…

代码随想录算法训练营第三十七 | ● 738.单调递增的数字 ● 968.监控二叉树

738.单调递增的数字 讲解链接&#xff1a;https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html class Solution { public:int monotoneIncreasingDigits(int n) {//整数转字符串&#xff0c;变为字符串访问比诸位取出数字要…

项目集成过程中的makefile记录

项目集成过程中的makefile记录 文章目录 项目集成过程中的makefile记录1.基础概念注释打印赋值方式常用变量$ 伪目标函数wildcard 多目录、文件操作 2.思路梳理**需求分析**目录结构 3.可行示例 持续更新中1.基础概念 注释 # 示例&#xff1a; # 项目名称打印 echo "H…

控制台相关

输入输出 输出 Console.WriteLine("123123");//光标空行 Console.Write("123123123123");//不空行输入 string str Console.ReadLine(); //如果在ReadKey(true)不会把输入的内容显示在控制台上 char c Console.ReadKey(true).KeyChar; Console.WriteL…