델피의 클래스 이해하기(4) - 초식 클래스의 이벤트

2626 단어 Delphi
먼저 생각을 그려 봅시다.
1. 나이 필드가 있는 클래스를 만든다.
2. Age 속성을 통해 FAge를 읽고 쓰기;
3. 입력한 나이가 100세가 되면 이벤트가 발생합니다. 이 이벤트는 On Hundred라고 명명됩니다.


unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

  end;



  {          :            ;            }

  TMyEvent = procedure of object;



  {TMyClass  }

  TMyClass = class

  strict private

    FAge: Integer;           {    }

    FOnHundred: TMyEvent;    {         TMyEvent         : FOnHundred}

    procedure SetAge(const Value: Integer);

  public

    procedure SetOnHundred1; {           }

    procedure SetOnHundred2; {           }

    constructor Create;

    property Age: Integer read FAge write SetAge;

    property OnHundred: TMyEvent read FOnHundred write FOnHundred; {        }

    {        On   }

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}





{ TMyClass }



constructor TMyClass.Create;

begin

  FOnHundred := SetOnHundred1; {      ,          SetOnHundred1   }

end;



procedure TMyClass.SetAge(const Value: Integer);

begin

  if (Value>0) and (Value<200) then

    Fage := Value;



  if Value=100 then

    OnHundred;      {        100   ,     }

end;



procedure TMyClass.SetOnHundred1;

begin

  ShowMessage('    100    !');

end;



procedure TMyClass.SetOnHundred2;

begin

  ShowMessage('         100  !');

end;







//  1:

procedure TForm1.Button1Click(Sender: TObject);

var

  myClass: TMyClass;

begin

  myClass := TMyClass.Create;

  myClass.Age := 99;                  {             200}

  ShowMessage(IntToStr(myClass.Age)); {99;       }

  myClass.Free;

end;



//  2:

procedure TForm1.Button2Click(Sender: TObject);

var

  myClass: TMyClass;

begin

  myClass := TMyClass.Create;

  myClass.Age := 100; {        ,      :     100    !}

  myClass.Free;

end;



//  3:

procedure TForm1.Button3Click(Sender: TObject);

var

  myClass: TMyClass;

begin

  myClass := TMyClass.Create;

  myClass.OnHundred := myClass.SetOnHundred2; {          }

  myClass.Age := 100; {        ,      :          100  !}

  myClass.Free;

end;



{

               : TMyEvent,      ,

                   ;



            ,        ,

                     ,

                    ,

     TMyEvent     ,      SetOnHundred1、SetOnHundred2       .

}

end.


 
   

좋은 웹페이지 즐겨찾기