委托是一種安全地封裝方法的類型,它與 C 和 C++ 中的函數指針類似。與 C 中的函數指針不同,委托是面向對象的、類型安全的和保險的。委托的類型由委托的名稱定義。下面的示例聲明了一個名為 Del 的委托,該委托可以封裝一個采用字符串作為參數並返回 void 的方法。 [csharp] public delegate void Del(string message); 構造委托對象時,通常提供委托將包裝的方法的名稱或使用匿名方法。實例化委托後,委托將把對它進行的方法調用傳遞給方法。調用方傳遞給委托的參數被傳遞給方法,來自方法的返回值(如果有)由委托返回給調用方。這被稱為調用委托。可以將一個實例化的委托視為被包裝的方法本身來調用該委托。例如: [csharp] // Create a method for a delegate. public static void DelegateMethod(string message) { System.Console.WriteLine(message); } 本示例演示如何組合多路廣播委托。委托對象的一個用途在於,可以使用 + 運算符將它們分配給一個要成為多路廣播委托的委托實例。組合的委托可調用組成它的那兩個委托。只有相同類型的委托才可以組合。 - 運算符可用來從組合的委托移除組件委托。 [csharp] class Class1 { public delegate void PrintDelegate(string name, string id); public delegate void Del(int i); static void Main(string[] args) { Class1 obj = new Class1(); PrintDelegate delegate1 = PrintStudent; PrintDelegate delegate2 = obj.PrinteBook; // +運算符操作的對象只能是委托對象。 //PrintDelegate multiDel = delegate1 + delegate2; //但是 += 右邊的操作對象可以是方法簽名。 //簡單的多播委托。 PrintDelegate multiDel = null; multiDel += obj.PrinteBook; multiDel += PrintStudent; multiDel("test", "123"); Del d = delegate(int i) { Console.WriteLine(++i); }; d(10); Console.Read(); } /** * 靜態方法和非靜態方法都可以用於委托的,簽名方法。 * */ //靜態方法 public static void PrintStudent(string name, string id) { www.2cto.com Console.WriteLine("學生信息"); Console.WriteLine("學號:{0}",id); Console.WriteLine("姓名:{0}",name); } //非靜態方法。 public void PrinteBook(string bookName, string code) { Console.WriteLine("書籍信息"); Console.WriteLine("編號:" + code); Console.WriteLine("書名:" + bookName); } }