• c#委托(Delegates)--基本概念及使用 转发


     在我这菜鸟理解上,委托就是可以用方法名调用另一方法的便捷方法,可以简化switch等语句的重复。最近做项目的时候恰好需要用到委托,便来复习及学习委托的使用。嗯...本人以前并没有用过,只是稍微知道而已。以下是整理的笔记。

    一.委托的概念

        委托是用户自定义的类,它定义了方法的类型。储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。

    二.委托类型的定义

    委托类型必须在被用来创建变量以及类型对象之前声明。

    委托类型的声明:

    1.以delegate关键字开头。

    2.返回类型+委托类型名+参数列表

    delegate void MyDel(int a)
    三.实例

    1)现在我们先创建了控制台程序,进行简单的实例

    namespace Func
    {
    public delegate void MyDel();//声明一个自定义委托
    class Program
    {
    static void Main(string[] args)
    {
    MyDel say1 = SayHi;
    MyDel say2 = new MyDel(SayHi);
    say1();
    say2();
    }
    static void SayHi()
    {
    Console.WriteLine("hi");
    }
    }
    }
    2)扩展实例

    namespace Func
    {
    public delegate int MyDel(int num);//声明一个自定义委托
    class Program
    {
    static int Add1(int a)
    {
    int b = 10 + a;
    Console.WriteLine("——Add1———");
    return b;

    }

    static int Add2(int a)
    {
    int b = 10 - a;
    Console.WriteLine("——Add2———");
    return b;

    }

    static void Calculate(MyDel ex, int a)
    {
    var result = ex(a);
    Console.WriteLine(result + " ");
    }

    static void Main(string[] args)
    {
    Calculate(Add1, 1);
    Calculate(Add2, 10);
    Console.ReadKey();
    }
    }
    }
    结果如下图

    上面实现了“把方法当作参数在另一个方法中传递或调用”;从上面可以看出,调用的方法和委托的返回类型,参数类型都必须一致。

    我我们可以把委托作为参数传递给封装好了的方法,通过委托来动态的调用方法。

    四.委托的加减运算


    可以使用+=运算符,为委托新增方法。

    同样可以使用-=运算符,为委托移除方法。

    当委托列表中有几个方法时,调用委托时,则会依次经过各个方法,并返回列表最后一项方法的结果。

    namespace Func
    {
    public delegate int MyDel(int num);//声明一个自定义委托
    class Program
    {

    static int Add1(int a)
    {
    int b = 10 + a;
    Console.WriteLine("——Add1———");
    return b;

    }

    static int Add2(int a)
    {
    int b = 10 - a;
    Console.WriteLine("——Add2———");
    return b;

    }

    static void Calculate(MyDel ex, int a)
    {
    var result = ex(a);
    Console.WriteLine(result + " ");
    }

    static void Main(string[] args)
    {
    //Calculate(Add1, 1);
    //Calculate(Add2, 10);
    MyDel myDel = Add1;
    myDel += Add2;
    Calculate(myDel, 10);
    Console.ReadKey();
    }
    }
    }
    结果如下图:

    那么有时候我们需要返回每个方法的结果,此方法就不适用了,那怎么才能实现每个方法的返回结果都可以获取到呢?后续再写了。今天就简单的介绍了委托的基本概念和使用。
    ---------------------
    作者:陈一木木
    来源:CSDN
    原文:https://blog.csdn.net/weixin_41963036/article/details/80295111
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    015.现场.快用Scala(4月)
    014.科普.有生产力的Sql语句
    JQuery速记
    草稿
    使用jquery.layout.js构建页眉/页脚/左侧导航/中间展示内容的网页结构
    实践自己的WebSite______流水
    如何生成带注释的DLL文件
    MVC如何在解决方案下创建文件夹
    如何利用子视图
    【草稿】JS中如何操作时间
  • 原文地址:https://www.cnblogs.com/Jeely/p/10974986.html
Copyright © 2020-2023  润新知