委托,回调函数

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

事件:

         定义:当发生特定动作时,去执行一段代码。事件的本质就是委托。比如按钮点击事件,键盘压下事件。。。

委托:

  1. 定义:委托是一个类。是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。签名就是方法的参数,返回值类型。

        比如:生活中,如果如果我们需要打官司,在法庭上是由律师为我们辩护的,然而律师真真执行的是当事人的陈词,这时候律师就是一个委托对象,当事人委托律师这个对象去帮自己辩护。

                   然而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.举例说明委托

    如上代码,顾客想要在美团上叫跑腿服务,只需要给他钱,告诉他我要买的东西,不需要知道谁帮我怎么去买的东西。

回调函数

  回调函数就是把一个方法的传给另外一个方法去执行。回调函数只是一个功能片段,由用户按照回调函数的调用约定来实现的一个函数。结合上述委托代码理解。

  

猜你喜欢

转载自www.cnblogs.com/SanBu-WuGui/p/12376088.html
今日推荐