• 理解 Delphi 的类(一) - 从结构/记录谈起


    类的概念 

    类是一种用户自定义的数据类型,可以说它是对某一类事物的抽象描述。

    类使用属性和方法来描述某一事务的具体特性和行为。

    简单举个例子:将轮船作为类进行描述,轮船不单单指一个物体,而是一类的总称。所以可以不考虑大小,颜色……而是将它抽象为一个类,对应的大小,颜色就可以在类中以属性的形式体现,而轮船在水中运动就是它的方法,所以一个类就是由属性和方法组成的

    记录

    现在我们在学习类之前先看看结构,也叫做记录。

    Delphi中的记录和类一样都是一种自定义类型,结构直接使用,内存是自动管理的;

    类只是一个模板,需要我们根据模型(类)来创建(Create函数)出对象才能够使用,这个过程就叫做类的实例化操作,用完之后需要手动释放。

    类中是可以有方法的,而结构里面只能有变量。

    下面演示之前我是在form上先画了一个button按钮,对按钮进行操作。

    1. unit Unit_Class01;
    2. interface
    3. uses
    4. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
    5. type
    6. TForm1 = class(TForm)
    7. Button1: TButton;
    8. procedure Button1Click(Sender: TObject);
    9. private
    10. { Private declarations }
    11. public
    12. { Public declarations }
    13. end;
    14. var
    15. Form1: TForm1;
    16. implementation
    17. {$R *.dfm}
    18. type
    19. TMyRecord = record {定义结构}
    20. d: TDate;
    21. end;
    22. TMyClass = class {定义类;没有实际意义只是演示}
    23. d: TDate;
    24. end;
    25. procedure TForm1.Button1Click(Sender: TObject);
    26. var
    27. MyRec: TMyRecord; {声明一个结构变量}
    28. MyCls: TMyClass; {声明一个类变量,也就是对象}
    29. begin
    30. {使用结构}
    31. MyRec.d := Now;
    32. ShowMessage(DateToStr(MyRec.d));
    33. ShowMessage(IntToStr(SizeOf(MyRec))); {8;结构的大小是 8 }
    34. {使用类}
    35. MyCls := TMyClass.Create; {需要先手动建立,因为类需要实例化为对象才可以使用}
    36. MyCls.d := Now;
    37. ShowMessage(DateToStr(MyCls.d));
    38. ShowMessage(IntToStr(SizeOf(MyCls))); {4;因为mycls对象是一个指针}
    39. MyCls.Free; {用完后释放}
    40. {
    41. 结构与对象(类的实例)在内存中以不同的方式存放,对象只是一个指针;
    42. 和结构相比,类拥有着更强大的功能!
    43. }
    44. end;
    45. end.

    输出结果如下: 

    结构和类的区别 

    由上面代码可以看出来在使用的时候,类就是比记录多了一个实例化,但是类是可以镶嵌方法的,而记录不行,就比如我现在要去用面向对象的方法来在做一个通讯录系统,这个时候如果我该怎么定义呢,应该是先定义一个记录体,这是单个人的,再定义一个类,就以班级为例,班级类中放的是记录的数组,这样就可以对整体进行增删改查了,而不是对个人进行CRUD操作

  • 相关阅读:
    Latex & Overleaf 写作问题记录
    【opencv】Opencv中数据类型CV_8U, CV_16U, CV_16S, CV_32F、CV_64F
    【Rxjava详解】(一)观察者模式的拓展
    观察者模式在Spring中事件监听机制的应用
    WebGL 纹理——在矩形表面贴上图像
    NewStarCTF2023week2-base!(base低位隐写)
    【回溯算法】leetcode 51. N 皇后
    C#使用UA-.NETStandard开发OPC UA客户端
    JAVA代码实现十大经典排序算法
    计算机图形学之圆
  • 原文地址:https://blog.csdn.net/m0_62853489/article/details/127435322