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 }
  • 相关阅读:
    window.open的火狐、谷歌兼容写法
    一个分数怎样约分?想知道的速度了。。。
    这是第二道题内容要求写一个银行的ATM系统 这个浪费了好长时间 ,遇到了许多问题,不过都解决了,上程序
    两个有理数相加(要求输入时以分数形式,输出时也以分数形式)
    linux centos 7.5下 源码编译安装 lua环境
    SecureCRT 6.7 vim高亮
    C#第一章笔记
    HTML5考试错题
    第九章博客
    第八章博客
  • 原文地址:https://www.cnblogs.com/yunquan/p/4923124.html
Copyright © 2011-2022 走看看