委托:帮助别人完成某类事情的一种机制。
使用委托的步骤:
1、定义委托
关键字:delegate
语法:[访问修饰符] delegate 返回值类型 委托名([参数列表])
2、实例化委托:将委托指向或引用某个方法,委托定义后必须实例化才能被调用
注意:
委托可以指向实例方法也可以指向静态方法,如果方法是静态的,则在main方法中不需要对象
实例化委托时的参数仅仅是方法名,所以不能加“()”,更不能传参数
3、使用委托
匿名方法
匿名方法使用委托的语法:
委托类型 委托实例 =delegate([参数列表])
{
代码块
};//分号绝对不能少
事件
1.定义事件:使用event关键字
语法:[访问修饰符] event 委托名 事件名;
2、订阅事件
语法:事件名+=new 委托(事件处理方法名)
3、引发事件
语法:事件名([参数列表]);


using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Test {//定义委托public delegate int Callback(int num1,int num2);class MathCalc{public int Plus(int number1, int number2){return number1 + number2;}public int Minus(int number1, int number2){return number1 - number2;}}//事件例子public class Teacher//教师类 {//定义一个委托和一个事件public delegate void ListenreEventHandler();public event ListenreEventHandler ListenerEvent; //定义引发事件的方法public void BeginClass(){Console.WriteLine("教师宣布上课!");if (ListenerEvent != null){ListenerEvent();//引发事件 }}}public class Student//学生类 {private string stuName;public Student(string name){this.stuName = name;}public void Listener(){Console.WriteLine("学生:"+stuName+",正在听课!");}public void Record(){Console.WriteLine("学生:" + stuName + ",正在做笔记!");}public void Sleep(){Console.WriteLine("学生:" + stuName + ",正在睡觉!");}}class Program{static void Main(string[] args){MathCalc mc = new MathCalc();//声明并实例化委托Callback cb = new Callback(mc.Plus);//调用委托int result = cb(1, 2);Console.WriteLine("1+2="+result);//使用匿名方法int thrid = 10;Callback calladd = delegate(int first, int second){int sum = first + second;return sum;};int total = calladd(10, 20) + thrid;//调用委托Console.WriteLine("10+20+10="+total);Teacher t = new Teacher();Student stu1 = new Student("张三");Student stu2 = new Student("李四");Student stu3 = new Student("王五");t.ListenerEvent += new Teacher.ListenreEventHandler(stu1.Record);t.ListenerEvent+=new Teacher.ListenreEventHandler(stu2.Listener);t.ListenerEvent+=new Teacher.ListenreEventHandler(stu3.Sleep);t.BeginClass();//触发事件 }} }