C#-委託(十七)

概述
  委託(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 }

 

結果

相關文章
相關標籤/搜索