Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 558|回复: 1

Delphi 类方法的定义和调用

[复制链接]

254

主题

363

帖子

2431

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2431
发表于 2024-12-25 19:14:05 | 显示全部楼层 |阅读模式
  1. type
  2.   TMyClass = class
  3.   strict private
  4.     class var ClassVar: Integer; // 定义一个类变量
  5.   public
  6.     class procedure ClassMethod; // 定义一个类方法
  7.   end;

  8. implementation

  9. class procedure TMyClass.ClassMethod;
  10. begin
  11.   // 在这里实现类方法的具体逻辑
  12.   ClassVar := 5; // 为类变量赋值
  13.   ShowMessage('ClassVar value is ' + IntToStr(ClassVar)); // 显示类变量的值
  14. end;

  15. end.
复制代码

要调用类方法,你可以直接使用类名.
  1. begin
  2.   TMyClass.ClassMethod; // 调用类方法
  3. end;
复制代码


给class var 赋初值:
  1. type
  2.   TMyClass = class
  3.   public
  4.     class var ClassVar: TObject; // 声明一个class var变量
  5.     constructor Create;
  6.     destructor Destroy; override;
  7.   end;

  8. { TMyClass }

  9. constructor TMyClass.Create;
  10. begin
  11.   inherited;
  12.   if ClassVar = nil then
  13.     ClassVar := TStringList.Create; // 示例:分配内存给class var
  14. end;

  15. destructor TMyClass.Destroy;
  16. begin
  17.   if Assigned(ClassVar) then
  18.   begin
  19.     ClassVar.Free; // 示例:显式释放class var所持有的资源
  20.     ClassVar := nil;
  21.   end;
  22.   inherited;
  23. end;
复制代码
在这个例子中,TMyClass 有一个class var 变量 ClassVar,它持有一个 TObject 类型的引用。在 Create 方法中,如果 ClassVar 是 nil,则分配一个 TStringList 对象给它。在 Destroy 方法中,在释放 TMyClass 实例之前,它会释放 ClassVar 持有的资源。
请注意,这只是一个示例,实际上你应该根据你的具体需求来管理 class var 所持有资源的生命周期


回复

使用道具 举报

254

主题

363

帖子

2431

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2431
 楼主| 发表于 2024-12-25 19:31:39 | 显示全部楼层
注意在Delphi中,constructor不能使用class修饰符。‌

在Delphi中,构造函数和析构函数不能使用class修饰符。构造函数和析构函数分别使用constructor和destructor关键字来定义,而不是使用class修饰符。例如:
  1. constructor Create(Name: string; Age: Integer);
  2. begin
  3.   FName := Name;
  4.   FAge := Age;
  5. end;

  6. destructor Destroy; override;
  7. begin
  8.   inherited;
  9. end;
复制代码

在Delphi中,类的声明有两种方式:

‌继承内置类‌:使用class关键字,如type TPerson = class(TPersonBase) ... end;。这种情况下,类会继承TPersonBase的属性和方法。
‌完全自定义类‌:使用object关键字,如type TPerson = object ... end;。这种情况下,类是完全自定义的,不需要遵循TPersonBase的构造和析构方法‌
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-4-16 04:55 , Processed in 0.014440 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表