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();
}
}
...
}