C#中的委托是用来干嘛的

在C#中我们会听到一个概念——委托。那么委托是个什么鬼,用来干嘛的呢?最近有些空闲时间就写一下C#中委托相关的知识。
开门见山,其实C#中的委托是用来实现传递回调函数的。在其他语言中如javascript中,如果你要往一个函数中传递一个回调函数,让此函数在执行了相应操作后可以调用你传递过去的回调函数。在javascript中实现这个很简单,只需要把需要回调的函数名传递过去就可以了。
但是,在C#中就不一样了。知道C#是一门强类型的语言。函数的参数必须要有严格的类型。而且也是不允许直接把函数作为另一个函数的参数的。即便是可以得话,那在申明函数的时候如何标识这个回调函数形参的类型呢?
回调就是在这样一个尴尬的情况下诞生的,来看一下下面的一段代码,如果我们按照javascript的逻辑去写那么代码应该是这样的:

using System;

namespace Test
{
    class Test
    {
        public Test()
        {
            Calculate(23, 45, ShowText);
        }

        public void Calculate(int num1, int num2, callback)
        {
            int sum = num1 + num2;
            callback(sum.ToString());
        }

        public void ShowText(string text)
        {
            Console.WriteLine(text);
        }
    }
}

但是直接把ShowText这个函数名传递给Calculate方法显然在C#中是会报错的。这时我们就需要用到委托delegate。于是我们添加添加一个委托,如下:

using System;

namespace Test
{
    class Test
    {
        public Test()
        {
            ShowTextDel showTextDel = ShowText;  // 委托就像方法的容器,用户存储方法。
            Calculate(23, 45, showTextDel);
        }

        public void Calculate(int num1, int num2, ShowTextDel callback)
        {
            int sum = num1 + num2;
            callback(sum.ToString());
        }

        // 定义一个只有一个`string`类型参数返回值为`void`的方法的委托。
        public delegate void ShowTextDel(string text);  

        public void ShowText(string text)
        {
            Console.WriteLine(text);
        }
    }
}

有了委托就可以在C#中传递回调函数了。但委托有如下的一些注意点:

  1. 既然委托作为函数或方法的容器,那么在强类型的C#中就需要函数或方法和委托具有相同的结构(即委托与函数或方法必须有相同的参数列表和相同的返回值)。
  2. 委托既然作为函数或方法的容器,一个委托可以容纳多个函数或方法。在调用这个委托的时候会依次调用这个委托中的各个方法。具体可以参考微软的官方文档:使用委托(C# 编程指南)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,323评论 9 118
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,837评论 18 399
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,280评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,252评论 19 139
  • 曾经 小的时候 总是觉得抽烟喝酒打架的人特别讨厌 特别让人反感 总是喜欢那些手拿书本 或者听听音乐带着耳机的 阳...
    别道德绑架阅读 234评论 0 1