1、聲明委托類型
先寫關鍵字delegate,再寫返回類型,再寫委托名稱,然后在一對()中添加參數列表。如:
delegate void myDelegate();
2、創建委托的實例,并用一個具體的方法來初始化它
如:
delegate void myDelegate();
private void myMethod(){...}
...
myDelegate del = new myDelegate(this.myMethod);
3、調用委托
如:
myDelegate del;
...
del();
4、聲明事件
先寫關鍵字event,再寫類型的名稱(類型必須是一個委托類型),再寫事件的名稱。如:
delegate void myDelegate();
class MyClass
{
public event myDelagate MyEvent;
}
5、訂閱事件(成為事件的訂閱者)
用new操作符創建一個委托實例(該委托具有與事件相同的類型),然后使用+=操作符,將委托實例同事件關聯起來。如
class MyEventHandlingClass
{
...
public void Start()
{
myClass.MyEvent += new myDelegate(this.eventHandlingMethod);
}
private void eventHandlingMethod()
{
...
}
private MyClass myClass = new MyClass();
}
還可以直接指定訂閱方法,讓編譯器自動生成新的委托:
public void Start()
{
myClass.MyEvent += this.eventHandlingMethod;
}
6、取消訂閱事件(不再成為一個事件的訂閱者)
創建一個委托實例(該委托具有與事件相同的類型),然后使用-=操作符,使委托實例從事件中脫離。如:
class MyEventHandlingClass
{
...
public void Stop()
{
myClass.MyEvent -= new myDelegate(this.eventHandlingMethod);
}
private void eventHandlingMethod()
{
...
}
private MyClass myClass = new MyClass();
}
或者:
public void Stop()
{
myClass.myEvent -= this.eventHandlingMethod;
}
7、引發一個事件
像調用方法那樣“調用”事件(在事件名稱后添加一對圓括號)。如果定義事件的委托要求參數,那么還要提供對應的實參。引發事件之前,不要忘記檢查事件是否為null。如:
class MyClass
{
public event myDelegate MyEvent;
...
private void RaiseEvent()
{
if(this.MyEvent != null)
{
this.MyEvent();
}
}
...
}