zoukankan      html  css  js  c++  java
  • 委托

    委托分为三种,分别是自己定义的delegate,Action, Func.

    一、什么是委托?

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

    其实委托就是方法而已,只不过他的参数也是一个方法。

    二、委托的好处?为什么要学它?

    网上,书上都说委托可以解决大量if else的问题,我看了例子,写的是排序的例子,利用委托搞了一个排序的规则,然而除了这个例子,其他的解决大量if else的场景我暂时想不到

    所以目前我使用委托的时候,一个非常好的应用场景就是发布订阅模式,也就是设计模式里面的观察者模式.初学者学委托和我有一样的疑惑,委托有什么用?我直接调用不是也可以吗?

    我为什么还要委托着调用?学习了发布订阅模式,你就明白委托的妙用了.在我的C#个人笔记博客里,有这个例子的介绍.

    三、代码怎么敲?

     delegate

    特点:可以带返回值,也可以不带返回值。

    代码:

    第一种表达方式:

    namespace 委托
    {
        class Program
        {
            private delegate string MyDele(); //定义一个委托类型
    
            static void Main(string[] args)
            {
                int x = 10;
                MyDele mydele = new MyDele(x.ToString); //创建委托实例,这里的x.ToString只是一个方法的引用,并没有调用这个方法
           //MyDele mydele=x.ToString; 这段代码和上面那段是等价的
    string s = mydele(); Console.WriteLine(s); Console.ReadKey(); } } }

    第二种表达方式:

     1 namespace 委托
     2 {
     3     class Program
     4     {
     5         private delegate void MyDele();
     6         private static void Print(MyDele print) //把委托类型当作参数使用了
     7         {
     8             print();
     9         }
    10 
    11         static void math1()
    12         {
    13             Console.WriteLine("这是第一个方法");
    14         }
    15 
    16         static void Main(string[] args)
    17         {
    18           
    19             MyDele mydele = math1;   //为它赋初值
    20             Print(mydele);
    21 
    22             Console.ReadKey();
    23         }
    24     }
    25 
    26 }

     Action

    特点:没有返回值,最多可带16个参数。

    代码:

     1 namespace 委托
     2 {
     3     class Program
     4     {
     5         static void math()
     6         {
     7             Console.WriteLine("这是第一个方法");
     8         }
     9 
    10         static void Main(string[] args)
    11         {
    12             Action vae = math;
    13             vae();
    14             Console.ReadKey();
    15         }
    16     }
    17 
    18 }

    Func

    特点:有返回值,最多可带16个参数,前面是参数类型,最后一个是返回值类型。

    代码:

     1 namespace 委托
     2 {
     3     class Program
     4     {
     5         static int math(int i,int j)
     6         {
     7             return i+j;
     8         }
     9 
    10         static void Main(string[] args)
    11         {
    12             Func<int,int,int> vae = math;
    13             Console.WriteLine(vae(3,5));
    14             Console.ReadKey();
    15         }
    16     }
    17 
    18 }
  • 相关阅读:
    伟大的微软,太智能了
    ASP.NET MVC中的统一化自定义异常处理
    去除无用的文件查找路径
    关于easyUI的一些js方法
    easyUI小技巧-纯干货
    easyui tree tabs
    ueditor初始化
    多图联动
    饼图tooltip
    配色
  • 原文地址:https://www.cnblogs.com/yunquan/p/4923124.html
Copyright © 2011-2022 走看看