事件(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);
}
}
沒有留言:
張貼留言