class MeiTuan { //声明委托 public delegate string OrderDelegate(int money, string order); public string OrderEnter(int money, string order, OrderDelegate oederDelegate) { //业务逻辑 Store store = new Store(); store.Receipt(money, order); store.Finish(); //可封装更多业务逻辑 return oederDelegate(money, order); } } class Store { public void Receipt(int money, string order) { Console.WriteLine("ご飯が作っています。。。。。。"); } public void Finish() { Console.WriteLine("ご飯Coming........"); } } class PaoTui { //回调函数【把一个函数作为另一个函数的参数】 public string BuyFood(int mongey, string order) { return "ご飯が買った。。。。。"; } } class Program { static void Main(string[] args) { MeiTuan member1 = new MeiTuan(); PaoTui brother = new PaoTui(); string mess = member1.OrderEnter(66, "rice", brother.BuyFood); Console.WriteLine(mess); Console.ReadKey(); } }
原文链接:https://blog.csdn.net/wxfx888/article/details/78079970
事件:
定义:当发生特定动作时,去执行一段代码。事件的本质就是委托。比如按钮点击事件,键盘压下事件。。。
委托:
- 定义:委托是一个类。是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。签名就是方法的参数,返回值类型。
比如:生活中,如果如果我们需要打官司,在法庭上是由律师为我们辩护的,然而律师真真执行的是当事人的陈词,这时候律师就是一个委托对象,当事人委托律师这个对象去帮自己辩护。
然而C#中委托的概念也就好比律师对象。
2.如何使用:
一、定义:delegate void Mydelegate(type1 para1,type2 para2);
二、声明: Mydelegate d;
三、实例化:d =new Mydelegate(obj.InstanceMethod);(把一个方法传递给委托的构造器),前面三步就好比构造一个律师对象,方法InstanceMethod好比是当事人
四、作为参数传递给方法:MyMethod(d);(委托实现把方法【obj.InstanceMethod】作为参数传入到另一个方法【MyMethod】,委托就是一个包装方法的对象)
五、在方法中使用委托。MyMethod方法好比是法官,MyMethod方法先调用委托,委托在调用方法InstanceMethod,这个过程就如法官向律师问话,然后律师之前肯定向当事人了解了案件的情况。C#委托中好比是律师,真真诉说案情的是当事人(真真被调用的是实例方法InstanceMethod)
六,委托可以实现方法的叠加,形成委托列表。比如:d +=Method2();
3.作用:
一、引入委托后,编程人员可以把方法的引用封装在委托对象中(把过程的调用转化为对象的调用,充分体现了委托加强了面向对象编程的思想。),然后把委托对象传递给需要引用方法的代码,这样在编译的过程中我们并不知道调用了哪个方法,这样一来,C#
引入委托机制后,使得方法声明和方法实现的分离,充分体现了面向对象的编程思想。
二、我是一个特殊的类,我定义了方法的类型,(就像int定义了数字类型一样,当用一个方法实例化委托对象时,这个委托就代表一个方法,这个方法的类型就是委托类型),我可以将方法当做另一个方法的参数来进行传递,使得程序更容易扩展。即解耦。
4.举例说明委托
如上代码,顾客想要在美团上叫跑腿服务,只需要给他钱,告诉他我要买的东西,不需要知道谁帮我怎么去买的东西。
回调函数
回调函数就是把一个方法的传给另外一个方法去执行。回调函数只是一个功能片段,由用户按照回调函数的调用约定来实现的一个函数。结合上述委托代码理解。