理解 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操作。

 

posted @   终一  阅读(254)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示