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