概述 委托(Delegate) 是存有對某個方法的引用的一種引用類型變數 委托特別用於實現事件和回調方法。所有的委托都派生自 System.Delegate 類 委托是一個類,麽它就可以被定義在任何地方,即可以定義在類的內部,也可以定義在類的外部 委托是一種類型安全的函數回調機制, 不僅能夠調用實例 ...
概述 委托(Delegate) 是存有對某個方法的引用的一種引用類型變數 委托特別用於實現事件和回調方法。所有的委托都派生自 System.Delegate 類 委托是一個類,麽它就可以被定義在任何地方,即可以定義在類的內部,也可以定義在類的外部 委托是一種類型安全的函數回調機制, 不僅能夠調用實例方法,也能調用靜態方法,並且具備按順序執行多個方法的能力 委托只是個命令,做事情是別人,自己本身是不用做事情的 聲明
public delegate int MyDelegate (string s);delegate:委托聲明的關鍵字 MyDelegate:委托名稱 int:返回類型
實例
1 using System; 2 namespace ConsoleApp1 3 { 4 public class Employee 5 { 6 public static void WatchMovie() 7 { 8 Console.WriteLine("go to watch movie"); 9 } 10 } 11 public class Boss 12 { 13 // 聲明一個委托 14 public delegate void ToWatchMovie(); 15 public static void Main(string[] args) 16 { 17 // 委托具體做的事情 18 ToWatchMovie BossCommand = new ToWatchMovie(Employee.WatchMovie); 19 BossCommand(); 20 Console.ReadKey(); 21 } 22 } 23 }結果
委托鏈 一個委托做多件事,將做的事情拼接起來 只有相同類型的委托可被合併 使用 "+" 運算符進行合併 "-" 運算符可用於從合併的委托中移除組件委托 可以再創建一個委托被調用時要調用的方法的調用列表。這被稱為委托的 多播(multicasting),也叫組播 實例
1 using System; 2 namespace ConsoleApp1 3 { 4 public class Employee 5 { 6 public static void WatchMovie() 7 { 8 Console.WriteLine("go to watch movie"); 9 } 10 public static void Eat() 11 { 12 Console.WriteLine("go to eat"); 13 } 14 } 15 public class Boss 16 { 17 // 聲明委托 18 public delegate void BossCommand(); 19 public static void Main(string[] args) 20 { 21 // 委托具體做的事情 22 BossCommand BC; 23 BossCommand BC1 = new BossCommand(Employee.WatchMovie); 24 BossCommand BC2 = new BossCommand(Employee.Eat); 25 BC = BC1 + BC2; 26 BC(); 27 Console.ReadKey(); 28 } 29 } 30 }
結果