委託是一種安全地封裝方法的類型,它與 C 和 C++ 中的函數指標類似。與 C 中的函數指標不同,委託是物件導向的、型別安全的和保險的。委託的類型由委託的名稱定義。下面的樣本聲明了一個名為 Del 的委託,該委託可以封裝一個採用字串作為參數並返回 void 的方法。
public delegate void Del(string message);
構造委派物件時,通常提供委託將封裝的方法的名稱或使用匿名方法。執行個體化委託後,委託將把對它進行的方法調用傳遞給方法。調用方傳遞給委託的參數被傳遞給方法,來自方法的傳回值(如果有)由委託返回給調用方。這被稱為調用委託。可以將一個執行個體化的委託視為被封裝的方法本身來調用該委託。例如:
// Create a method for a delegate.public static void DelegateMethod(string message){ System.Console.WriteLine(message);}本樣本示範如何組合多路廣播委託。委派物件的一個用途在於,可以使用 + 運算子將它們分配給一個要成為多路廣播委託的委託執行個體。組合的委託可調用組成它的那兩個委託。只有相同類型的委託才可以組合。
- 運算子可用來從組合的委託移除組件委託。
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) { 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); } }