所有的委托實體都有多播的功能,所謂多播,就像一群程式員在瞬聘網填好了求職意向后,某天有個公司發布了一個和這些程式員求職意向剛好相匹配的作業,然后這些求職者都被通知了 - “有一份好作業招人啦,你們可以直接申請去上班了!”,
也就是說,一個委托實體不僅可以指向一個方法,還可以指向多個方法,例如:
MyDelegate d = MyMethod1;// “+=” 用來添加,同理“-=”用來移除, d += MyMethod2;// d -= MyMethod2
呼叫時,按照方法被添加的順序依次執行,注意,對于委托,+= 和 -= 對null是不會報錯的,如:
MyDelegate d; d += MyMethod1;// 相當于MyDelegate d = MyMethod1;
為了更好的理解多播在實際開發中的應用,我用模擬瞬聘網的職位匹配小工具來做示例,在職位匹配程序中會有一段處理時間,所以在執行匹配的時候要能看到執行的進度,而且還要把執行的進度和執行情況寫到日志檔案中,在處理完一個步驟時,將分別執行兩個方法來顯示和記錄執行進度,
我們先定義一個委托(ProgressReporter),然后定義一個匹配方法(Match)來執行該委托中的所有方法,如下:
public delegate void ProgressReporter(int percentComplete); public class Utility { public static void Match(ProgressReporter p) { if (p != null) { for (int i = 0; i <= 10; i++) { p(i * 10); System.Threading.Thread.Sleep(100); } } } }
然后我們需要兩個監視進度的方法,一個把進度寫到Console,另一個把進度寫到檔案,如下:
class Program { static void Main(string[] args) { ProgressReporter p = WriteProgressToConsole; p += WriteProgressToFile; Utility.Match(p); Console.WriteLine("Done."); Console.ReadKey(); } static void WriteProgressToConsole(int percentComplete) { Console.WriteLine(percentComplete+"%"); } static void WriteProgressToFile(int percentComplete) { System.IO.File.AppendAllText("progress.txt", percentComplete + "%"); } }
運行結果:

看到這里,是不是發現你已然更加愛上C#了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/64872.html
標籤:C#
上一篇:C# 存盤日志
下一篇:靜態方法和實體方法對于委托的區別
