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