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 }

 

结果


 
posted @ 2018-11-21 20:17  Tynam.Yang  阅读(558)  评论(0编辑  收藏  举报