理解 Delphi 的类(一) - 从结构/记录谈起
类的概念
类是一种用户自定义的数据类型,可以说它是对某一类事物的抽象描述。
类使用属性和方法来描述某一事务的具体特性和行为。
简单举个例子:将轮船作为类进行描述,轮船不单单指一个物体,而是一类的总称。所以可以不考虑大小,颜色……而是将它抽象为一个类,对应的大小,颜色就可以在类中以属性的形式体现,而轮船在水中运动就是它的方法,所以一个类就是由属性和方法组成的
记录
现在我们在学习类之前先看看结构,也叫做记录。
Delphi中的记录和类一样都是一种自定义类型,结构直接使用,内存是自动管理的;
类只是一个模板,需要我们根据模型(类)来创建(Create函数)出对象才能够使用,这个过程就叫做类的实例化操作,用完之后需要手动释放。
类中是可以有方法的,而结构里面只能有变量。
下面演示之前我是在form上先画了一个button按钮,对按钮进行操作。
代码示例:
1 unit Unit_Class01; 2 3 interface 4 5 uses 6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; 7 8 type 9 TForm1 = class(TForm) 10 Button1: TButton; 11 procedure Button1Click(Sender: TObject); 12 private 13 { Private declarations } 14 public 15 { Public declarations } 16 end; 17 18 var 19 Form1: TForm1; 20 21 implementation 22 23 {$R *.dfm} 24 25 type 26 TMyRecord = record {定义结构} 27 d: TDate; 28 end; 29 30 TMyClass = class {定义类;没有实际意义只是演示} 31 d: TDate; 32 end; 33 34 35 procedure TForm1.Button1Click(Sender: TObject); 36 var 37 MyRec: TMyRecord; {声明一个结构变量} 38 MyCls: TMyClass; {声明一个类变量,也就是对象} 39 begin 40 {使用结构} 41 MyRec.d := Now; 42 ShowMessage(DateToStr(MyRec.d)); 43 ShowMessage(IntToStr(SizeOf(MyRec))); {8;结构的大小是 8 } 44 45 {使用类} 46 MyCls := TMyClass.Create; {需要先手动建立,因为类需要实例化为对象才可以使用} 47 48 MyCls.d := Now; 49 ShowMessage(DateToStr(MyCls.d)); 50 ShowMessage(IntToStr(SizeOf(MyCls))); {4;因为mycls对象是一个指针} 51 52 MyCls.Free; {用完后释放} 53 54 55 { 56 结构与对象(类的实例)在内存中以不同的方式存放,对象只是一个指针; 57 和结构相比,类拥有着更强大的功能! 58 } 59 end; 60 end.
结构和类的区别
由上面代码可以看出来在使用的时候,类就是比记录多了一个实例化,但是类是可以镶嵌方法的,而记录不行,就比如我现在要去用面向对象的方法来在做一个通讯录系统,这个时候如果我该怎么定义呢,应该是先定义一个记录体,这是单个人的,再定义一个类,就以班级为例,班级类中放的是记录的数组,这样就可以对整体进行增删改查了,而不是对个人进行CRUD操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?