关于委托自己的一点理解

简介:   委托类型用来定义和响应应用程序中的回调, C#与.NET高级编程一书是这么说的。 所以要先搞懂回调的概念。 回调(Callback)本身指的是可以作为参数传给其他代码的一段可执行代码, 我对于一段可执行的代码理解是姑且可以看做就是方法(Method)。

  委托类型用来定义和响应应用程序中的回调, C#与.NET高级编程一书是这么说的。 

所以要先搞懂回调的概念。 回调(Callback)本身指的是可以作为参数传给其他代码的一段可执行代码, 我对于一段可执行的代码理解是姑且可以看做就是方法(Method)。 也就是说可以把方法作为参数传递给其他代码执行。 而回调从字面自已理解是相对与调用来定义的, 正常调用往往都是高层代码(如应用程序)去调用底层的函数(如系统函数,库函数),而回调则是底层函数执行时调用高层的代码。 

在C语言中有回调函数的概念是用指针来实现的, 本人对于指针的理解还只是局限在大学学的一点点知识所以对于指针就不多说了。而C#中回调功能则是通过委托来实现,而且委托更为安全和面向对象。 对于安全我的基本理解是应该是类型安全。

   对于最开始我所说的委托回调我一直不是很理解,今天结合一些例子仔细想了想,有了一些自己的想法就写了 以免以后的时候自己忘了。

   下面我用一个实际的例子来说明一下。   

定义了一个类,我们可以看做是底层的操作

    class bottomClass
    {
        public delegate void testHandler(string message);//定义一个委托类型
        private testHandler listofHandler;//定义委托的变量;
        //通过方法给委托添加方法,而封装了委托变量
        public void Regist(testHandler callback)
        {
            listofHandler += callback; //因为委托是支持多路广播的,所以可以用这种方式,其实是实现了testHandler.Combine()的方法.
           
        }
        //提供给高层所调用的方法,执行这个方法满足一定条件就会要调用 调用者提供的方法和方法的实现, 也就是把方法当做参数让底层代码来使用。
        public void show(int a)
        
        {
            if (a < 10)
            {
                listofHandler("小于10");
            }
            else
            {
                listofHandler("大于10");
            }
        }
    }

而我们在main函数入口里,就相当于高层里面,调用show(),就会根据传入的值不同而调用 调用方自己定义的方法,当然在用之前肯定得先把方法注册到委托里面去, 而这个方法是由调用者自己定义的,只需要满足当前定义委托要求的格式就行了。 可以想象事件,底层知道我们触发事件了,但是触发事件后要做什么却是由我们调用方来决定的,而我们决定后的方式则通过委托传递给底层让其操作。其实也就是相当于我们传递一个字符串要底层来操作,比如显示,加减。但是我们现在要传递是方法,所以用委托。

程序肯定有很多bug 手随便打的 不要深究。  

今天所说的都是委托的同步调用,也就是实现委托对象的invoke方法。  下一次我会把异步调用的理解写一下。


目录
相关文章
|
缓存 前端开发 JavaScript
【面试题】大厂面试官:你做过什么有亮点的项目吗?
【面试题】大厂面试官:你做过什么有亮点的项目吗?
266 0
|
调度
关于定时任务,看着一系列就够了——2.Cron表达式
软件开发定时任务基础—— Cron 表达式介绍
1839 0
关于定时任务,看着一系列就够了——2.Cron表达式
|
机器学习/深度学习 自然语言处理 搜索推荐
神经网络算法 —— Embedding(嵌入)!!
神经网络算法 —— Embedding(嵌入)!!
4186 1
|
4月前
|
数据采集 存储 JSON
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
|
4月前
|
Ubuntu Linux iOS开发
什么是Ubuntu,它与Linux有何不同?
Ubuntu是一个免费的开源操作系统,我们可以从其官方网站下载。比起windows,需要购买许可证,macOS甚至可能需要买一台苹果电脑。Linux不需要任何费用。
|
5月前
|
人工智能 NoSQL Java
LangChain4j 项目概览
LangChain4j 是一个专为 Java 开发者设计的大语言模型 (LLM) 集成框架,旨在简化 Java 应用程序与各种 LLM 提供商的集成过程。该项目受到 Python 的 LangChain、Haystack、LlamaIndex 等框架的启发,为 Java 生态系统提供了强大而统一的 LLM 工具链。
|
11月前
|
PyTorch 算法框架/工具 芯片
新手入门:DGL在昇腾上的安装问题
本文介绍了在aarch64架构和Python 3.10环境下安装DGL(Deep Graph Library)的过程。首先通过`uname -a`确认硬件架构,接着使用`python --version`检查Python版本。为确保兼容性,从指定链接下载适合的whl包或通过pip安装dgl。过程中遇到了torchdata版本不兼容的问题,通过降级torchdata至0.7.1版本解决。此外,针对NPU芯片适配,重新安装了与CANN 8.0.RC2兼容的torch和torch_npu组件。最终成功导入dgl包并准备进行模型训练验证。
|
关系型数据库 MySQL 数据库
DELETE、TRUNCATE 和 DROP 在MySQL中的区别及使用示例
DELETE、TRUNCATE 和 DROP 在MySQL中的区别及使用示例
868 0
|
存储 缓存 移动开发
详细介绍HTML5的离线储存(工作原理+使用场景+真实使用步骤)
详细介绍HTML5的离线储存(工作原理+使用场景+真实使用步骤)
|
存储 安全 API
每日一博 - App key和App Secret
每日一博 - App key和App Secret
2540 1