委托的本質,是一個類,而事件,是一個委托類型的私有變量加上兩個公有方法(事件的+=和-=),這是本質區別。
打個比方,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方法。
