美文网首页
C#中的委托是用来干嘛的

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

作者: xiaer | 来源:发表于2016-03-20 16:21 被阅读2350次

在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# 编程指南)

相关文章

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

    在C#中我们会听到一个概念——委托。那么委托是个什么鬼,用来干嘛的呢?最近有些空闲时间就写一下C#中委托相关的知识...

  • C# 委托

    C#委托 C#中的委托(Delegate)类似于C或C++中函数的指针。委托(Delegate)是存有对某个方法的...

  • C#委托Delegate和事件Event实战应用

    一、委托的概念 C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate)是...

  • C# 基础知识系列- 11 委托和事件

    0. 前言 事件和委托是C#中的高级特性,也是C#中很有意思的一部分。出现事件的地方,必然有委托出现;而委托则不一...

  • (转).NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位。 C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括...

  • C#委托 匿名函数 Lambda

    C# 中委托的发展#在 C# 1.0 中,通过使用在代码中其他位置定义的方法显式初始化委托来创建委托的实例。 C#...

  • 委托

    在中我们会听到一个概念——委托。那么委托是个什么鬼,用来干嘛的呢?最近有些空闲时间就写一下中委托相关的知,识。 开...

  • C# 委托(Delegate)

    C# 中的委托(Delegate)类似于 C 或 C++ 中的函数指针。委托(Delegate) 是存有对某个方法...

  • 19-委托

    C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。 委托(Delegate) 是存有对某个方...

  • C#中的委托

    就目前的学习进度,可将委托实例视为一个数据元素为函数的数组,执行委托实例就是将里面的函数都执行一遍。具体使用: 先...

网友评论

      本文标题:C#中的委托是用来干嘛的

      本文链接:https://www.haomeiwen.com/subject/zghhlttx.html