Delphi学习笔记十一——类2

本文探讨了Delphi中类与结构的区别,包括内存管理方式的不同,并介绍了类的方法、属性及事件的应用。通过实例展示了如何定义类的属性及事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.结构与类都是自定义类型,结构可以直接使用,内存是自动管理;类对象需要创建才可以使用,并在使用完成后需要对其手动释放。例如
type  
  TMyRecord = Record  
    d:TDate;  
  end;  
  
  TMyClass = class  
    d:TDate;  
  end;  
procedure TForm2.Button1Click(Sender: TObject);  
var  
  myRecord : TMyRecord;  
  myClass : TMyClass;  
begin  
  //使用结构(不需要初始化,内存自动管理)  
  myRecord.d := Now;  
  ShowMessage(DateToStr(myRecord.d));  
  ShowMessage(IntToStr(SizeOf(myRecord)));//8  
  
  //使用类  
  myClass := TMyClass.Create;  //初始化对象  
  myClass.d := Now;  
  ShowMessage(DateToStr(myClass.d));  
  ShowMessage(IntToStr(SizeOf(myClass)));//4  
  myClass.Free;   //释放对象  
end;  


2.关于类的方法,在上一篇类的的文章中已经有所涉及。这里就不再详述。一般情况下,类都会定义在interface区;在implementation区定义的类只能本单元使用。
3.关于类的属性
类属性的定义:

{定义两个属性}  
  TMyClass2 = class  
    private  
      FName : string;  
      FAge : Integer;  
      procedure SetAge(const Value:Integer);    //Value设置为常量  
      procedure SetName(const Value:string);  
    published  
      property Name: string read FName write SetName;  
      property Age : Integer read FAge write SetAge;  
    end;  

自定义set方法:

procedure TMyClass2.SetAge(const Value: Integer);  
begin  
  if (Value>=0) and (Value<200) then  
    FAge := Value;  
end;  
  
procedure TMyClass2.SetName(const Value: string);  
begin  
  if Value<>'' THEN  
    FName:= Value;  
end;  


设置属性的直

myClass2.Age := 99;    //访问属性  


4.类与事件
关于类与事件的定义,我将通过一个例子来给予说明。
 事件的定义:

//定义事件  
  TMyEvent = procedure of object;  
  
  TMyClass = class  
    private  
      FAge:Integer;  
      FOnHundred:TMyEvent;  
      procedure SetAge(const Value:Integer);  
    published  
      procedure SetOnHundred1;  //定义事件1  
      procedure SetOnHundred2;  //定义事件2  
      constructor create;       //Form初始化时执行  
      property Age:Integer read FAge write SetAge;  
      property OnHundred: TMyEvent read FOnHundred write FOnHundred; //定义事件属性(通过属性的形式来设置事件)  
    end;  


在Form一开始创建的时候就必须先定义一个事件。

constructor TMyClass.create;  
begin  
   FOnHundred:= SetOnHundred1;   
end;  


事件的调用

myclass.OnHundred := myclass.SetOnHundred2; //事件的指定(类似于属性)  


事件类型是一个指针,指向一个过程(不带返回值的方法),事件在定义时指定了参数的类型和个数,调用过程的参数必须与其保持一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值