C#-委託(十七)
阿新 • • 發佈:2018-11-21
概述
委託(Delegate) 是存有對某個方法的引用的一種引用型別變數
委託特別用於實現事件和回撥方法。所有的委託都派生自 System.Delegate 類
委託是一個類,麼它就可以被定義在任何地方,即可以定義在類的內部,也可以定義在類的外部
委託是一種型別安全的函式回撥機制, 不僅能夠呼叫例項方法,也能呼叫靜態方法,並且具備按順序執行多個方法的能力
委託只是個命令,做事情是別人,自己本身是不用做事情的
宣告
例項
委託鏈 一個委託做多件事,將做的事情拼接起來 只有相同型別的委託可被合併 使用 "+" 運算子進行合併 "-" 運算子可用於從合併的委託中移除元件委託 可以再建立一個委託被呼叫時要呼叫的方法的呼叫列表。這被稱為委託的 多播(multicasting),也叫組播 例項
public delegate int MyDelegate (stringdelegate:委託宣告的關鍵字 MyDelegate:委託名稱 int:返回型別s);
例項
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 }
結果