zoukankan      html  css  js  c++  java
  • C#回调和委托

    曾经有人对我说java的回调很巧妙。

    今天我自己看了一下,回调的关键就是一个接口的事情。

    也许是因为用了一定的手法,一开始不好懂吧,所以看懂了会感觉巧妙。

    但是我心里的想法却是,真啰嗦!

    回调的实例

    下面是一个回调的实例,截图自网友的文章----https://www.jianshu.com/p/2cbc5232547a。

    意思就是,我提前定义了CallBack接口,里面预先约定了giveMe这一行为。

    然后Buyer内部有个继承自CallBack的成员,需要在一个方法中传入这个CallBack实例。

    Buyer内部有个方法会做一些事情,做完了呢?就会做执行约定好的giveMe行为。

    然后Me呢?通过一个匿名内部类实现了CallBack接口,Override了giveMe行为。

    这样以后Buyer执行完doThing方法后,就会执行giveMe行为。

    做了这么多其实就是为了动态的替换Buyer类的giveMe行为。

    C#中用委托怎么写?

    我想让GiveMe方法是活的?那我就放上一个GiveMe方法的指代物----名字也叫GiveMe。

    Me想改变Buyer实例的GiveMe行为?给GiveMe这个委托赋值一下就好了。

    很明显,使用委托是更加简单直接的做法,更直觉式的。

    本质

    大家都差不多其实,大家的本质都是一个指针。

    大家都是一个【方法引用】的指针指向了【被调用的方法】。

    当然,回调实际是类的指针,不是函数的指针。

    这个本质是原理层面的。

    文档

    刚才查了一下微软文档,微软文档很贴心的说明了何时应该使用委托,何时应该使用接口。

    C#当然也可以使用接口来实现这一功能,但是委托好用的时候就用委托了。

  • 相关阅读:
    Codeforces 992C(数学)
    Codeforces 990C (思维)
    Codeforces 989C (构造)
    POJ 1511 Invitation Cards(链式前向星,dij,反向建边)
    Codeforces 1335E2 Three Blocks Palindrome (hard version)(暴力)
    POJ 3273 Monthly Expense(二分)
    POJ 2566 Bound Found(尺取前缀和)
    POJ 1321 棋盘问题(dfs)
    HDU 1506 Largest Rectangle in a Histogram(单调栈)
    POJ 2823 Sliding Window(单调队列)
  • 原文地址:https://www.cnblogs.com/fabao/p/11953772.html
Copyright © 2011-2022 走看看