• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:デリゲートとイベントの関係(VB.NET2005))

デリゲートとイベントの関係(VB.NET2005)

このQ&Aのポイント
  • VB2005の本に書いてある内容が理解できません。誰か助けてください!イベントとデリゲートの仕組み .NETイベントが内部ではデリゲートとして処理されることを理解すれば、その威力を存分に引き出すことができます。
  • もう少し厳密に言うと、イベントを発行するクラスには、そのイベントをサブスクライブするクライアントすべてをポイントする、プライベートデリゲートフィールドが定義されています。イベントが発行されると、.NETのイベントインフラストラクチャによって該当するデリゲートフィールドのInvokeメソッドが呼び出されます。そして、Invokeメソッドからすべてのクライアントにイベントが通知されます。
  • このことは、.NET Frameworkで定義されているイベントごとに対応するデリゲートが存在することからもうかがい知ることができます。[オブジェクトブラウザ]を使用すれば、それを確認できます。たとえば、第2引数としてEventArgsオブジェクトを受け取るイベントはすべて、内部ではSystem.EventHandlerデリゲートを通じて管理されます。ほとんどのWindowsフォームコントロールが公開するKeyPressイベントは、KeyPressEventHandlerデリゲートによって処理されますが、このデリゲートは、第1引数としてObject、第2引数としてKeyPressEventArgsオブジェクトを受け取るSubプロシージャをポイントします。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

実例を挙げれば分かりやすいかな。 VBは苦手なのでC#で説明します。 -----イベントの基本形------------ //イベントを発行するクラス public class MyControl : Control //※1 { private event EventHandler myEvent = null; //※2 public event EventHandler MyEvent //※3 { add { myEvent += value; } remove { myEvent -= value; } } protected void OnMyEvent(EventArgs e) { if (myEvent != null) myEvent(this, e); //※4 : myEvent.Invoke(this, e)と同値 } protected override void WndProc(ref Message m) { if (何らかのタイミングで) OnMyEvent(EventArgs.Empty); //※8 base.WndProc(ref m); } } //イベントを使用するクラス public partial class Form1 : Form //※5 { private MyControl myControl1; private void Form1_Load(object sender, EventArgs e) { myControl1.MyEvent += myControl1_MyEvent; //※6 } public void myControl1_MyEvent(object sender, EventArgs e) //※7 { //Control.MyEventのイベント処理 } } ----------- イベントを発行するクラス(※1)には、そのイベント(※3)をサブスクライブする(※6)クライアント(※5)すべてをポイントする、 プライベートデリゲートフィールド(※2)が定義されています。 イベントが発行されると(※8)、.NETのイベントインフラストラクチャによって該当するデリゲートフィールド(※2)の Invokeメソッドが呼び出されます(※4)。 そして、Invokeメソッドからすべてのクライアントにイベントが通知されます(※7が実行される)。 //イベント サブスクリプションとサブスクリプションの解除 //http://msdn.microsoft.com/ja-jp/library/ms366768.aspx

trap1130
質問者

お礼

サブスクライブとはイベントを受け取る、イベントを通知される、という解釈でしょうか。 スッキリしました。 ありがとうございます!!

関連するQ&A