2008年8月22日 星期五

事件(Event) 與 回呼( Callback ) 的不同

事件(Event) 與 回呼( Callback ) 看起來很像, 運作的方式也差不多,都是透過 deleget 來進行委派, 但使用的方式有一點點不同. 其實應該說是角度上的不同.

事件是由物件本身觸發, 而向外界發佈, 所以外界可以使用 += 識別符, 將方法(method)的委派掛上去, 而事件一般來說都是public的.

回呼並不向外界發佈, 而是透過其他方式取得要處理的方法的委派, 通常一個回呼指向一個方法

以下是"事件"的使用方式:
public delegate void TestHandler(string msg);
class ClassA
{
  public event TestHandler TestEvent;  
  public void Invoke()
  {
    TestEvent("Hello Event");
  }
}

class MainClass
{
  public ClassA cA = new ClassA();
  public MainClass()
  {
    this.cA += new TestHandler(cA_TestEvent);
  }
  private void cA_TestEvent(string msg)
  {
    Message.Show(msg);
  }
}

以下是"回呼"的使用方式
public delegate void TestHandler(string msg);
class ClassA
{
  private TestHandler TestCallback;
  public void RegistCallback(TestHandler callback)
  {
   this.TestCallback = callback;
  }
  public void Invoke()
  {
    TestCallback("Hello Callback");
  }

}

class MainClass
{
  public ClassA cA = new ClassA();
  public MainClass()
  {
    TestHandler myCallback = new TestHandler(cA_Callback);
    this.cA.RegistCallback(myCallback );
  }
  private void cA_Callback(string msg)
  {
    Message.Show(msg);
  }
}

沒有留言:

張貼留言