【原文】http://www.cnblogs.com/liqingwen/p/6046171.html
序
上篇《C# 知識回顧 - 委托 delegate》已經介紹委托的基礎知識,這裡是對其進行補充說明以及深入了解。
目錄
委托可以與命名方法關聯。 使用命名方法對委托進行實例化時,該方法將作為參數傳遞,例如:
1 class Program 2 { 3 //聲明一個委托 4 delegate void MyDel(string message); 5 6 7 static void Main(string[] args) 8 { 9 //使用靜態方法作為參數實例化委托 10 MyDel del = Print; 11 } 12 13 //聲明一個方法 14 private static void Print(string message) 15 { 16 Console.WriteLine(message); 17 } 18 }
這被稱為使用命名的方法。 使用命名方法構造的委托可以封裝靜態方法或實例方法。在早期版本的 C# 中,命名方法是對委托進行實例化的唯一方式。 但是,在不希望付出創建新方法的系統開銷時,C# 使您可以對委托進行實例化,並立即指定委托在被調用時將處理的代碼塊。 代碼塊可以包含 lambda 表達式或匿名方法。
【備注】①作為委托參數傳遞的方法必須與委托聲明具有相同的簽名。②委托實例可以封裝靜態或實例方法。③盡管委托可以使用 out 參數,但建議您不要將其用於多路廣播事件委托,因為您無法知道哪個委托將被調用。 示例1:以下是聲明及使用委托的一個簡單示例。 注意,委托 MyDel 和關聯的方法 Print 具有相同的簽名(即便方法的參數名稱 m 和 n 的位置替換)1 class Program 2 { 3 //聲明一個委托 4 delegate void MyDel(int n, int m); 5 6 static void Main(string[] args) 7 { 8 //使用靜態方法 Print 作為參數實例化委托 9 MyDel del = Print; 10 Console.WriteLine("准備好了哦,要開始調用委托了哦!"); 11 12 for (int i = 0; i < 10; i++) 13 { 14 Print(i, 1); 15 } 16 17 Console.Read(); 18 } 19 20 //聲明一個方法 21 private static void Print(int m, int n) 22 { 23 Console.Write(m - n + " "); 24 } 25 }
--預覽版,整理中--