委托的本质,是一个类,而事件,是一个委托类型的私有变量加上两个公有方法(事件的+=和-=),这是本质区别。
打个比方,string 也是一个类,而string s = "a",这个s是string类型的一个变量(略有不恰当,为了方便直观理解)。
public delegate void myDel();相当于你创建了一个myDel的类,所以委托可以在任何地方创建,类需要实例化,所以委托需要实例化,要myDel m = ……;
申明一个事件 public event myDel myEvent;
事件myEvent是一个myDel类型的一个变量,因为是变量,所以事件只能在类里面申明,不需要实例化,有点类似与上面的那个m,当然不全是,他还有两个方法(+=,-=),调用一次+=方法,myEvent += MethodA;其实是把MethodA方法,封装成一个myDel类型的委托对象,然后把这个对象的引用赋值给这个myEvent变量。如果多次调用+=,就是多个方法封装成了多个myDel委托对象,然后这些委托对象放在一个列表里面,然后myEvent就指向这个列表,触发的时候,就是调用这个列表里面的所有委托的Invoke方法。