(delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类型兼容性规则)

embedded/2024/9/24 7:30:43/
14.2.1 泛型类型兼容性规则

​ 在传统的Pascal和Object Pascal中,核心类型兼容性规则基于类型名称的等价性。换句话说,只有当两个变量的类型名称相同时,它们才是类型兼容的,而不管它们所引用的实际数据结构。这是静态数组类型不兼容的经典示例(TypeCompRules示例的一部分):

typeTArrayOf10 = array[1..10] of Integer;
procedure TForm30.Button1Click(Sender: TObject);
varArray1: TArrayOf10;Array2: TArrayOf10Array3, Array4: array[1..10] of Integer;
beginArray1 := Array2;Array2 := Array3; // Error// E2010 Incompatible types: 'TArrayOf10' and 'Array'Array3 := Array4;Array4 := Array1; // Error// E2010 Incompatible types: 'Array' and 'TArrayOf10'
end;

​ 正如您在上面的代码中所看到的,所有四个数组在结构上是相同的。然而,编译器只允许您对那些类型兼容的数组进行赋值,要么是因为它们的类型具有相同的显式名称(如TArrayOf10),要么是因为它们具有与在单个语句中声明的数组相同的隐式(编译器生成的)类型名称。

​ 这种类型兼容性规则只有很少的例外,比如与派生类相关的类型例外。规则的另一个例外,也是一个重要的例外,是泛型类型的类型兼容性,这也可能被编译器在内部使用,以确定何时从泛型类型生成新类型及其所有方法。

​ 新规则规定,当泛型类型具有相同的泛型类定义和实例类型时,它们是兼容的,而不再考虑与此定义相关联的类型名称。换句话说,泛型类型实例的完整名称是泛型类型和实例类型的组合。

​ 在下面的示例中,这四个变量都是类型兼容的:

typeTGenericArray<T> = classAnArray: array[1..10] of T;end;TIntGenericArray = TGenericArray<Integer>;procedure TForm30.Button2Click(Sender: TObject);
varArray1: TIntGenericArray;Array2: TIntGenericArray;Array3, Array4: TGenericArray<Integer>;
beginArray1 := TIntGenericArray.Create;Array2 := Array1;Array3 := Array2;Array4 := Array3;Array1 := Array4;
end;

http://www.ppmy.cn/embedded/46375.html

相关文章

“仿RabbitMQ实现消息队列”---整体架构与模块说明

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、概念性框架理解 我们主要实现的内容&#xff1a; 1.Broker服务器&#xff1a;消息队列服务器&#xff08;服务端&…

实验11 OSPF协议配置

实验11 OSPF协议配置 一、OSPF单区域配置&#xff08;一&#xff09;原理描述&#xff08;二&#xff09;实验目的&#xff08;三&#xff09;实验内容&#xff08;四&#xff09;实验配置&#xff08;五&#xff09;实验步骤 二、OSPF多区域配置&#xff08;一&#xff09;原理…

Windows系统下DOS命令

Windows系统下DOS命令 1. 与文件操作相关1.1 mkdir&#xff0c;md命令1.2 rmdir、rd命令1.3 dir命令1.4 start命令1.5 echo命令1.6 type命令1.7 copy命令1.8 move命令1.9 copy和move的区别1.10 del命令1.11 rename命令1.12 attrib命令1.13 fsutil命令1.14 assoc命令 2. 与网络相…

Jira的原理及应用详解(五)

本系列文章简介&#xff1a; 在当今快速发展的软件开发和项目管理领域&#xff0c;有效的团队协作和精确的项目进度追踪是确保项目成功的关键。Jira作为一款广受欢迎的项目和问题追踪工具&#xff0c;以其强大的功能、灵活的定制性以及卓越的用户体验&#xff0c;赢得了全球众多…

数据可视化在智慧园区中的核心价值解析

数据可视化在智慧园区中发挥着至关重要的价值。智慧园区是一种基于物联网、大数据、云计算等先进技术的现代化管理模式&#xff0c;旨在通过智能化手段提升园区的管理效率、服务水平和用户体验。而数据可视化作为数据处理和展示的重要工具&#xff0c;正是智慧园区实现这些目标…

plc台达编程入门:探索与征服自动化世界的初阶之旅

plc台达编程入门&#xff1a;探索与征服自动化世界的初阶之旅 在当今自动化飞速发展的时代&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;作为工业自动化领域的核心控制设备&#xff0c;其重要性不言而喻。台达PLC以其高效、稳定、易用的特点&#xff0c;在市场中占…

巨详细Linux安装MySQL

巨详细Linux安装MySQL 1、查看是否有自带数据库或残留数据库信息1.1检查残留mysql1.2检查并删除残留mysql依赖1.3检查是否自带mariadb库 2、下载所需MySQL版本&#xff0c;上传至系统指定位置2.1创建目录2.2下载MySQL压缩包 3、安装MySQL3.1创建目录3.2解压mysql压缩包3.3安装解…

【qt15】windeployqt 安装依赖

debug模式vs可以使用qt插件新建qt文件 D:\Qt15\5.15.2\msvc2019\bin\windeployqt.exe Warning: Cannot find Visual Studio installation directory, VCINSTALLDIR is not set.D:\Qt15\5.15.2\msvc2019\bin\windeployqt.exe .\filecopier.exeWindows PowerShell Copyright (C) …