1. 程式人生 > >C#-委託(十七)

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 }

 

結果