委托入门
委托
1. 什么是委托
MSDN:委托是一种引用方法的类型,一旦为委托分配了方法,该委托与方法具有相同的行为.委托的使用和其他方法一样具有参数列表和返回值
个人理解:
委托是一种封装方法的 ”类” ,如果该委托于某方法方法具有相同的签名和参数列表,则可以用委托实现该方法的功能,委托的实例可以代表具体的函数。
|
namespace DelDemo { public class Eat { public delegate void Del(string str); //和下面定义的函数具有相同的签名和返回值 public void zsEat(string food) { Console.WriteLine("张三"+food); } static void { Eat zs=new Eat(); //zsEat.zsEat("西瓜"); 可以通过这么调用也可以实现 Del d=new Del(zs.zsEat); //运用委托进行调用 d("西瓜"); } } } |
2. 异步回调(callback)
CodeProject: c# delegate is a callback function
异步回调的过程就是在一个方法里声明一个委托类型,然后通过这个委托类型去调用另一个方法
|
using System; namespace DelDemo { public class Eat { public delegate void public void zsEat(string food) { Console.WriteLine("张三吃"+food); } public void lsEat(string food) { Console.WriteLine("李四吃"+food); } public static void AllEat(string food,Del del) { del(food); //从一个方法中去调用另一个方法 } static void { Eat eat=new Eat(); AllEat("西瓜",eat.zsEat); //委托是一个方法的 “类”,所以可以把”类”的实例传给 委托这个类 其实委托在编译的时候就是编译成一个类 AllEat("葡萄",eat.lsEat); } } } |
3. 多播委托
委托可以适用 “+”和”-” 进行多播委托,这里的加减符号是在委托这类中重载的
C#提供了c++中的重载符号的方法,这样省去了不少代码,特别是代码量多的时候
|
using System; namespace DelDemo { public class Eat { public delegate void public void zsEat(string food) { Console.WriteLine("张三吃"+food); } public void lsEat(string food) { Console.WriteLine("李四吃"+food); } public void wwEat(string food) { Console.WriteLine("王五吃"+food); } static void { Eat eat=new Eat(); Del d=d1+d2+d3; //委托可以相加的 d("西瓜"); Console.WriteLine("李四接电话!!!"); Del del=d-d2; //委托相减 del("葡萄"); Console.WriteLine("李四回来了!!!"); Del Alldel= Alldel("牛肉"); } } } |

浙公网安备 33010602011771号