大致來說,委托是一個類,該類內部維護著一個字段,指向一個方法。事件可以被看作一個委托類型的變量,通過事件注冊、取消多個委托或方法。本篇分別通過委托和事件執行多個方法,從中體會兩者的區別。
□ 通過委托執行方法
class PRogram{static void Main(string[] args){Example example = new Example();example.Go();Console.ReadKey();}}public class Example{public delegate void DoSth(string str);internal void Go(){//聲明一個委托變量,并把已知方法作為其構造函數的參數DoSth d = new DoSth(Print);string str = "Hello,World";//通過委托的靜態方法Invoke觸發委托d.Invoke(str);}void Print(string str){Console.WriteLine(str);}}
以上,
○ 在CLR運行時,委托DoSth實際上就一個類,該類有一個參數類型為方法的構造函數,并且提供了一個Invoke實例方法,用來觸發委托的執行。○ 委托DoSth定義了方法的參數和返回類型○ 通過委托DoSth的構造函數,可以把符合定義的方法賦值給委托○ 調用委托的實例方法Invoke執行了方法
但,實際上讓委托執行方法還有另外一種方式,那就是:委托變量(參數列表)
public class Example{public delegate void DoSth(object sender, EventArgs e);internal void Go(){//聲明一個委托變量,并把已知方法作為其構造函數的參數DoSth d = new DoSth(Print);object sender = 10;EventArgs e = new EventArgs();
新聞熱點
疑難解答