(delphi11最新学习资料) Object Pascal 学习笔记---第10章第1节(定义属性)

第10章 属性和事件

​ 在过去的三章中,我已经介绍了Object Pascal中面向对象编程(OOP)的基础知识,解释了这些概念并展示了大多数面向对象编程语言中通用特性是如何具体实现的。自Delphi的早期,Object Pascal语言就是一种完全面向对象的语言,但具有其特有的风格。事实上,它还充当了一个基于组件的可视化开发工具的编程语言。

​ 这些并不是相互独立的特性:对这种开发模型的支持基于一些核心语言特性,如属性和事件,最早在Object Pascal中引入,然后被一些面向对象编程语言部分复制。例如,属性可以在Java和C#等其他语言中找到,但它们具有直接源于Object Pascal的渊源,尽管我个人更喜欢原始实现,不久后我将解释为什么。

​ Object Pascal之所以能够支持快速应用程序开发(RAD)和可视化编程,是因为类似属性、“published"访问修饰符、事件、组件概念以及本章中介绍的其他一些概念。这一开发模型通常使用"属性-方法-事件模型”(PME模型)这一术语来描述,它是RAD方法的具体实现。

10.1 定义属性

​ 什么是属性?属性可以被描述为标识符,它们允许您访问和修改对象的状态,可能会触发在幕后执行的代码。在Object Pascal中,属性通过字段或方法抽象和隐藏数据访问,使其成为封装的主要实现方式。可以用一种方式来描述属性,那就是"最大程度的封装"。

​ 从技术上讲,属性是一个带有数据类型的标识符,通过readwrite说明符映射到某些实际数据。与Java或C#不同,在Object Pascal中,read和write说明符可以是获取器(getter)或设置器(setter)方法,也可以直接引用字段。

​ 例如,这是使用常见方法(直接从字段读取,通过方法写入)定义日期对象的属性的示例:

private 
	FMonth : Integer;
	procedure SetMonth(value : Integer);
public
	property Month : Integer read FMonth write SetMonth;

​ 要访问"Month"属性的值,这段代码必须读取私有字段FMonth的值。要更改该值,需要调用"SetMonth"方法。更改值的代码(以防止负值)可能如下所示:

procedure TDate.SetMonth(value : Integer);
begin
	if (value < = 0) or (value > 12) then
		FMonth := 1
	else
		FMonth := value;
end;

注意: 在出现不正确的输入情况,比如负月份数,通常最好显示一个错误(通过引发异常)而不是在幕后调整值,但出于简单的入门演示的考虑,我将保留代码不变。

​ 请注意,字段和属性的数据类型必须完全匹配(如果存在差异,可以使用简单的方法进行类型转换)。类似地,setter 过程的单个参数类型或getter函数的返回值必须与属性类型完全匹配。

​ 可以使用不同的组合(例如,我们也可以使用方法来读取值或在写指令中直接更改字段),但使用方法来更改属性的值是最常见的。以下是相同属性的一些替代实现:

property Month : Integer read GetMonth write SetMonth;
property Month : Integer read FMonth write FMonth;

注意: 当编写访问属性的相关的代码时,重要的是意识到可能会调用某一个方法。问题在于其中一些方法还需要一些时间来执行;它们也可能产生多种副作用,通常包括在屏幕上(慢速)重绘控件。尽管属性的副作用很少有文档记录,但您应该知道它们的存在,特别是当您尝试优化代码时。

​ 属性的写指令也可以省略,使属性成为只读属性:

property Month : Integer read GetMonth;

​ 从技术上讲,您也可以省略读指令并定义一个只写属性,但这通常没有太多意义,而且极少使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 20.04 LTS 在3588安卓主板上测试yolov8-1.0版本的yolov8n-seg模型

0. 创建虚拟环境 #!< 创建虚拟环境yolov8 $ sudo pip install virtualenv $ sudo pip install virtualenvwrapper $ mkvirtualenv yolov8 -p /usr/bin/python3.81. 将yolov8n-seg.pt转换为yolov8n-seg.onnx文件 #!< 创建项目目录yolov8-rknn并下载yolov8n-seg.pt模型文…

MATLAB环境下基于随机期望最大化的多分量信号瞬时频率估计方法

相对于频率成分单一、周期性强的平稳信号来说&#xff0c;具有非平稳、非周期、非可积特性的非平稳信号更普遍地存在于自然界中。调频信号作为非平稳信号的一种&#xff0c;由于其频率时变、距离分辨率高、截获率低等特性&#xff0c;被广泛应用于雷达、地震勘测等领域。调频信…

.net反射(Reflection)

文章目录 一.概念&#xff1a;二.反射的作用&#xff1a;三.代码案例&#xff1a;四.运行结果&#xff1a; 一.概念&#xff1a; .NET 反射&#xff08;Reflection&#xff09;是指在运行时动态地检查、访问和修改程序集中的类型、成员和对象的能力。通过反射&#xff0c;你可…

SAP项目任务一览表

根据SAP Activate项目管理方法论的主要精神&#xff0c;浓缩到一些主要的团队和任务。 主要的团队有&#xff1a; 项目管理(办公室)Project Management(office)&#xff1a;项目经理团队&#xff0c;包括项目办公室。负责项目整体运行和监控&#xff0c;项目办公室负责项目的…

【MySQL 安装与配置】Window简单安装MySQL,并配置局域网连接

文章日期&#xff1a;2024.04.17 系统&#xff1a;Window10 || Window11 类型&#xff1a;安装与配置MySQL数据库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js…

Stm32-hal库串口教程

工程是在上一节的LED的基础上修改的。 串口原理图 串口配置 led参考 CubelMX点灯-CSDN博客https://blog.csdn.net/anlog/article/details/137830323生成工程 编写包含文件 编写重定向代码 编写发送 编译下载 串口没有收到数据 查找原因 少配置了下图 再编译下载 收到数据…

【MySQL 数据宝典】【内存结构】- 002 Page管理机制

一、 Page 管理机制 Buffer Pool 的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page页中缓存&#xff0c;以后使用可以减少磁盘IO操作&#xff0c;提升效率。 1.1 Page 页的分类 free page &#xff1a; 空闲page&#xff0c;未被使用clean page&#xff…

Ubuntu 系统安装 VS Code 并配置 C++ 环境

Linux 系列教程&#xff1a; VMware 安装配置 Ubuntu&#xff08;最新版、超详细&#xff09;FinalShell 远程连接 Linux&#xff08;Ubuntu&#xff09;系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️ ➡️VS Code 官方教程&#xff1a;Using C on Linux in VS Code&…

Meta因露骨AI图片陷入困境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

wsl安装与日常使用

文章目录 一、前向配置1、搜索功能2、勾选下面几个功能&#xff0c;进行安装二、安装WSL1、打开Windows PowerShell,查找你要安装的linux版本2、选择对应版本进行安装3、输入用户名以及密码 三、配置终端代理1、打开powershell,查看自己的IP把以下信息加入到~/.bashrc中 四、更…

目标检测——食品饮料数据集

一、重要性及意义 对食品和饮料进行目标检测的重要性和意义体现在多个方面&#xff1a; 商业应用与市场分析&#xff1a;目标检测技术在食品和饮料行业有着广泛的应用前景。通过对超市货架、餐馆菜单或广告海报中的食品和饮料进行自动识别和计数&#xff0c;商家可以获取关于产…

【C语言】——字符串函数的使用与模拟实现(下)

【C语言】——字符串函数的使用与模拟实现&#xff08;下&#xff09; 前言五、长度受限类字符串函数5.1、 s t r n c p y strncpy strncpy 函数5.2、 s t r n c a t strncat strncat 函数5.3、 s t r n c m p strncmp strncmp 函数 六、 s t r s t r strstr strstr 函数6.1、函…

go语言context

context在服务端编程基本都贯穿所有&#xff0c; Context 是请求的上下文信息。对于RPC Server来说&#xff0c;一般每接收一个新的请求&#xff0c;会产生一个新的Context&#xff0c;在进行内部的函数调用的时候&#xff0c;通过传递Context&#xff0c;可以让不同的函数、协…

常用的数据结构及算法

一、数据结构 &#xff08;一&#xff09;线性结构&#xff1a;一对一。 1.可以使用数组、链表来表示。数组又分为静态数组和动态数组两种。链表常用的是单链表。 2.两种特殊的线性结构&#xff1a;队列和栈。其中队列是先进先出&#xff08;排队&#xff09;&#xff0c;栈…

reportlab 生成pdf文件 (python)

1 安装 pip install reportlab2 应用场景 通过网页动态生成PDF文档大量的报告和数据发布用XML一步生成PDF 官网案例 3 PLATYPUS Platypus是“Page Layout and Typography Using Scripts”&#xff0c;是使用脚本的页面布局和印刷术的缩写&#xff0c;这是一个高层次页面布局…

网易狼人杀创建房间方法

进入游戏后 如下图 点击 建房 进入后 会要我们选择 自己想玩的板子 例如 我们就选进阶场的第一个 点击后 我们就会进来了

TCP的一些功能详述

文章制作不易&#xff0c;望各位大佬多多点赞&#xff0c;球球各位啦&#xff01;&#xff01;&#xff01;&#xff01; 目录 1.TCP的简介 2.TCP协议中部分数据的理解 1.端口号 2.序列号 3.四位首部长度 4.6位保留位 5. 16位校验和 6.数据&#xff08;TCP的载荷&#…

upload-labs靶场详解

靶场环境 下载链接&#xff1a;https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 使用小皮集成环境来完成这个靶场 将文件放到WWW目录下就可以进行访问 进入关卡后页面呈现&#xff1a; Pass-01&#xff08;前端绕过&#xff09; 我们先尝试上传一个web.…

c++ qt6.5 打包sqlite组件无法使用,尽然 也需要dll支持!这和开发php 有什么区别!

运行 程序会默认使用当前所在文件夹中的 dll 文件&#xff0c;若文件不存在&#xff0c;会使用系统环境变量路径中的文件&#xff1b;又或者是需要在程序源代码中明确指定使用的 dll 的路径。由于我安装 Qt 时将相关 dll 文件路径都添加到了系统环境变量中&#xff0c;所以即使…

arcgis中坡向计算工作原理说明

用于识别出从每个像元到其相邻像元方向上值的变化率最大的下坡方向。坡向可以被视为坡度方向。输出栅格中各像元的值可指示出各像元位置处表面的朝向的罗盘方向。将按照顺时针方向进行测量&#xff0c;角度范围介于 0&#xff08;正北&#xff09;到 360&#xff08;仍是正北&a…