(delphi11最新学习资料) Object Pascal 学习笔记---第12章第1节 ( 类数据、Virtual类方法和隐藏的self参数)

12.1.1 类数据

​ 类数据是所有类对象之间共享的数据,提供全局存储但具有类特定的访问权限(包括访问限制)。您如何声明类数据?只需在类中定义一个标记为“class var”的部分:

type  TMyData = class  private  class var  FCommonCount: Integer;  public  class function GetCommon: Integer;  end;

​ 类数据字段的声明块可以在同一部分的 var 中进行(如下所示,在 private 下面):

type  TMyData = class  private  class var  FCommonCount: Integer;  var  MoreObjectData: string;  public  class function GetCommon: Integer;  end;

​ 除了声明类数据,您还可以定义类属性,我们将在后面的部分中介绍。

12.1.2 Virtual类方法和隐藏的self参数

​ 虽然类方法的概念在各种编程语言中是通用的,但Object Pascal的实现有一些独特之处。首先,类方法有一个隐含的(或隐藏的)Self参数,就像实例方法一样。然而,这个隐藏的Self参数是指向类本身的引用,而不是类的一个实例。

​ 乍一看,类方法有一个隐藏的参数指向类本身似乎没什么用。毕竟,编译器知道方法的类。然而,有一种特殊的语言特性可以解释这一点:与大多数其他语言不同,在Object Pascal编程语言中,类方法可以是Virtual类型。也就是说,在派生类中,你可以覆盖基类的方法,就像你可以对普通方法所做的那样。

注解:对Virtual类方法的支持与对Virtual构造函数的支持相关(这是一种特殊用途的类方法)。这两种特性在许多编译型和强类型的OOP语言中都找不到。

12.1.3 类的静态方法

​ 在语言中引入静态类方法是为了平台兼容性。普通类方法与静态类方法之间的区别在于,静态类方法没有对其自身类的引用(没有指示类本身的Self参数),也不能是Virtual类型。

​ 下面是一个简单的例子,其中有一些不正确的语句已被注释掉,这个例子来自ClassStatic示例:

type  TBase = class  private  class procedure TBase.One;  begin  // Error: Instance member 'FTmp' inaccessible here  // Show(FTmp);  Show('One');  // Show(Self.ClassName);  Show(ClassName);  end;  class procedure TBase.Two;  begin  Show('Two');  // Error: Undeclared identifier: 'Self'  // Show(Self.ClassName);  Show(ClassName);  Two;  end;  end;

​ 在这两种情况下,您可以直接调用这些类方法,或者通过一个对象来调用它们:

TBase.One;  
TBase.Two;  
Base := TBase.Create;  
Base.One;  
Base.Two;

​ 在Object Pascal中,静态类方法有两个有趣的特性,使其非常有用。第一个是可以用于定义类属性,这将在下一部分介绍。第二个是静态类方法与C语言完全兼容,接下来将会解释。

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

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

相关文章

串联所有单词的子串 ---- 滑动窗口

题目链接 题目: 分析: 我们上次做的题目, 是找到所有字符的异位词, 和这道题有些类似, 使用记录有效字符的个数找到子字符, 此题无非是把字符变成了字符串题目回顾 有一下几方面不同, 我们以示例1为例: 1. 哈希表 上次我们使用的是哈希数组, 因为数组的下标可以是字符, 现…

常类API(Math,System,Runtime)

1、Math 是帮助我们用于进行数学计算的工具类私有化构造方法,所有的方法都是静态的 方法名 说明public static int abs(int a) 获取参数绝对值 public static double ceil(int a)向上取整public static double floor(int a)向下取…

java项目之教学辅助平台(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教学辅助平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 教学辅助平台的主要使用者分…

如何在 Ubuntu 12.10 上使用 Python 创建 Nagios 插件

介绍 Python 是一种在 Linux 上默认可用的流行命令处理器。 我们之前已经介绍过如何在 Ubuntu 12.10 x64 上安装 Nagios 监控服务器。 这一次,我们将扩展这个想法,使用 Python 创建 Nagios 插件。 这些插件将在客户 VPS 上运行,并通过 NR…

Java String转JSONObject时保持字段顺序不变

Java String转JSONObject时保持字段顺序不变 问题背景解决方案 问题背景 在业务接口开发过程中,有一个新增接口,需要支持批量新增数据,这时入参就需要用到 json 格式数据,且包含 list 集合,比如这样的数据格式&#x…

windows11 Django环境安装

相关文档 1、验证python和pip3环境 C:\Users\Administrator>python Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for…

基于yolov2深度学习网络的单人口罩佩戴检测和人脸定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..............................................................I0 imresize…

QX----mini51单片机学习---(7)矩阵键盘

目录 1矩阵键盘的识别 2相关c语言 3实践编程 1矩阵键盘的识别 假设按列扫描按下S6P30:0P34:1然后高流向低,P34:0,刚开始是0xf0:1111 0000 后面是0xe0:1110 0000 ,当是0xe0能确…

MySQL用SQL取三列中最大的数据值

1、有如下数据: ABC000097.0600330.72330.720069.650027.8827.85086.92086.92219.42219.4219.41 需要展示为如下形式: ABC结果列0000097.06097.060330.72330.72330.7200669.65009.6527.8827.85027.8886.92086.9286.92219.42219.4219.41219.42 解决办…

Spring Cloud系列—Spring Cloud Gateway服务网关的部署与使用指南

Gateway网关 文章目录 Gateway网关1. 网关基本简介1.1 什么是网关1.2 为什么需要网关? 2. 快速搭建gateway网关2.1 创建新模块2.2 引入依赖2.3 编写启动类2.4 配置路由规则2.5 测试 3. 路由过滤4. 过滤器4.1 简介4.2 网关过滤器4.2.2 种类 4.3 自定义过滤器4.3.1 自…

平衡三进制小数详解与进制转换

标准三进制是“逢三进一,退一还三”的机制,平衡三进制与之类似,但就是偏移了一下变得对称了,平衡三进制与标准三进制可以相互转换,但这样显得有点多余了,所以这里只讲平衡三进制与十进制的转换。 数字系统的…

Flutter 中的 ActionChip 小部件:全面指南

Flutter 中的 ActionChip 小部件:全面指南 在Flutter的Material组件库中,ActionChip是一种用于呈现一组相关操作的组件。它通常用于较少的、需要用户立即进行的操作,如过滤、排序或删除。ActionChip在视觉上与ChoiceChip相似,但使…

MyBatis的核心配置文件---configuration.xml

在MyBatis中,configuration.xml 是MyBatis的核心配置文件,它包含了MyBatis的全局配置信息,如数据源配置、事务管理器配置、别名配置、映射文件配置等。尽管在Spring Boot项目中,MyBatis的配置可以大部分通过属性配置在application…

数据结构与算法-排序算法3-插入排序

目录 1.插入排序: 1.介绍: 2.动态图解 3.举例 4.小结插入排序规则 5.插入排序代码 6.运行时间 代码: 运行结果: 1.插入排序: 1.介绍: 数组中n个元素,把这n个待排序元素看成一个有序序…

Oracle JDK 与 OpenJDK:如何选择及其区别

引言 在选择 Java 开发工具包 (JDK) 时,很多开发者可能会困惑于 Oracle JDK 和 OpenJDK 之间的差异。本文将详细分析这两者的区别,帮助大家做出更明智的选择。 背景 2006 年,SUN 公司宣布 Java 开源,推出了 OpenJDK。2009 年&a…

(Java面试题——基础版)JVM、JRE和JDK的关系

JVM Java Virtual Machine是Java虚拟机 ,Java程序需要运行在虚拟机上 ,不同的平台有自己的虚拟机 ,因此Java语言可以 实现跨平台。JVM 负责将 Java 字节码(即编译后的 .class 文件)翻译成特定平台上的机器码&#xff0…

直播预告-如何快乐学习亚马逊云科技AWS,玩游戏备考亚马逊云科技云从业者认证?

一边玩一边学习亚马逊云科技云技能,这么好的事尊的假的?本周六(5约11日)晚20点,亚马逊云科技UG云端夜话Night Talk活动精彩回归~ 本次亚马逊云科技UG云端夜话直播是什么? 小李哥这次将在多平台…

分析 vs2019 cpp20 规范的 STL 库模板 function ,源码注释并探讨几个问题

(1 探讨一)第一个尝试弄清的问题是父类模板与子类模板的模板参数的对应关系,如下图: 我们要弄清的问题是创建 function 对象时,传递的模板参数 _Fty , 传递到其父类 _Func_class 中时 ,父类的模板参数 _Ret…

Maven配置集profile

在开发场景中,通常有dev、sit和prod三个环境,分别对应开发、内部测试和生产。 在不同的环境中,因为数据、资源等隔离需要,往往需要不同的配置,这样在部署项目的时候就有着多套配置集灵活选择的需求(避免手动…

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

基础知识要求: Java:方法、while循环、for循环 Python: 方法、while循环、for循环 题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head […