概述
委托(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 }
结果