イベント・メソッドの Self


Hatena  2009-05-31 21:19:00  No: 34585

イベント・メソッドの Self は何を指しているのでしょうか?
procedure TMyPtn.Greeting;
begin
  if Assigned(FOnGreeting) then
    FOnGreeting(Self); //この Self は何のためにあるのか?
end;
  ヘルプによるとSelf 識別子はそのメソッドが呼び出されたオブジェクトを参照するということですから、 たとえば次のように使用した場合 Self は MyPtn1 になるのでしょうか?
-------------
MyPtn1 := TMyPtn.Create;

procedure TForm1.MyPtn1OnGreeting(Sender: TObject);
begin
  with MyPtn1 do
  begin
    ・・・・・
  end;
end;


toc  2009-06-01 23:15:56  No: 34586

Selfが指すのは「イベントを呼び出したオブジェクト」ではなくあくまで「メソッドを実行しているオブジェクト」です。
その例だとTForm1のメソッドの中なので、Selfが指すのはTForm1のインスタンスになります。

> FOnGreeting(Self); //この Self は何のためにあるのか?
TMyPtnのメソッド内なので、そのSelfはTMyPtnのインスタンス(MyPtn1とか)を指します。
これが下のイベントハンドラの引数で渡されますから、Sender = MyPtn1 となります。
つまり相手の方でSenderを見れば「イベントを呼び出したオブジェクト」がどれか特定できる。これが目的です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加