C#委托
2020-07-21 17:01
651 查看
委托
定义与应用场景
委托是一种类,定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。特别用于实现事件和回调方法,所有委托都派生自System.Delegate类。
声明委托
与类的定义相似,委托的定义语法如下:
修饰符 delegate 返回值类型 委托名 ( 参数列表 ); public delegate void MyDelegate();
实例化委托
实例化委托步骤如下:
委托名 委托对象名 = new 委托名 ( 方法名 );//方法名既可以是静态方法名 //也可以是实例方法名,注意方法名必须与定义时返回值类型和参数列表相同 MyDelegate myDelegate = new MyDelegate(Test.SayHello);
实例化后调用形式如下:
委托对象名(参数列表);
代码例子
class Program { public delegate void MyDelegate(); static void Main(string[] args) { MyDelegate myDelegate = new MyDelegate(new Test().SayHello); myDelegate(); } } class Test { public void SayHello() { Console.WriteLine("Hello Delegate!"); } }
多播委托
指在一个委托中注册多个方法,注册方法时在委托中使用+或者-实现添加或撤销方法。
class Program { //定义购买商品委托 public delegate void OrderDelegate(); static void Main(string[] args) { //实例化委托 OrderDelegate orderDelegate = new OrderDelegate(Order.BuyFood); //向委托中注册方法 orderDelegate += Order.BuyCake; orderDelegate += Order.BuyFlower; //调用委托 orderDelegate(); } } class Order { public static void BuyFood() { Console.WriteLine("购买快餐!"); } public static void BuyCake() { Console.WriteLine("购买蛋糕!"); } public static void BuyFlower() { Console.WriteLine("购买鲜花!"); } }
撤销购买鲜花:
orderDelegate -= Order.BuyFlower;
匿名委托
使用匿名方法注册在委托上,在委托中通过定义代码块实现委托的作用,语法如下:
//定义委托 修饰符 delegate 返回值类型 委托名 ( 参数列表 ); //定义匿名委托 委托名 委托对象 = delegate { //代码块 };//<-------注意分号 //调用委托 委托对象名 ( 参数列表 );
使用匿名委托计算长方形面积
class Program { public delegate void AreaDelegate(double length, double width); static void Main(string[] args) { Console.WriteLine("请输入长方形的长:"); double length = double.Parse(Console.ReadLine()); Console.WriteLine("请输入长方形的宽:"); double width = double.Parse(Console.ReadLine()); AreaDelegate areaDelegate = delegate { Console.WriteLine("长方形的面积为:" + length * width); }; areaDelegate(length, width); } }