Delphi学习笔记十一——类2

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; //事件的指定(类似于属性)


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

 

5. 字段

type
   TAncestor = class
       Value : Integer;
   end;
   TDescendant = class(TAncestor)
       Value : string;
   end;
   var
      MyObject : TAncestor;
   begin
      MyObject := TDescendant.Create;
      TDescendant(MyObject).Value := 'hello world';
   end;



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值