• C#学习第九弹之委托


    先上委托的例子:

     1 using System;
     2 
     3 delegate int myDelegateHandler(int a, int b);
     4 
     5 public class A
     6 {
     7     //静态方法
     8     public static int M1(int a, int b)
     9     {
    10         return a + b;
    11     }
    12 }
    13 
    14 public class Test
    15 {
    16     public static void Main()
    17     {
    18         //实例一个委托
    19         myDelegateHandler tmp = new myDelegateHandler(A.M1);
    20         //调用委托
    21         int sum = tmp(1, 3);
    22         Console.WriteLine(sum.ToString());
    23 
    24     }
    25 }

    委托的好处:提高可扩展性!

    委托其实是一个类,定义了方法的类型,使得可以把方法当作另外一个方法的参数来进行传递,这样可以实现动态赋参数,有时可以避免大量分支结构(if-else),使得程序具有良好的可扩展性。说的这里,想必大家已经清楚了“委托”的含义了吧。

    再举个例子:List<T>类型的Find方法的参数也是一个委托,它把“怎么去查找”或者说“怎么样才算找到”这个问题留给了开发人员。开发人员只需要定义一个参数为T,返回值为布尔型的函数,实现函数体,并将函数作为参数传给Find方法,就可以完成集合中元素的查找。

    了解C++ STL的可能会联想到:sort这个函数,允许用户自定义比较函数,道理是类似的,不过C++里面并不叫委托,但是传递函数的思想是一致的。

    委托链:

     1 using System;
     2 
     3 public class FuWuYuan
     4 {
     5     public static void BuyTicket()
     6     {
     7         Console.WriteLine("每次都让我去买票,囧");
     8     }
     9 
    10     public static void BuyMovieTicket()
    11     {
    12         Console.WriteLine("而且还要让我带电影票,囧");
    13     }
    14 }
    15 
    16 class LaoBan
    17 {
    18     public delegate void BugTicketEventHandler();
    19 
    20     public static void Main(string[] args)
    21     {
    22         BugTicketEventHandler myDelegate = new BugTicketEventHandler(FuWuYuan.BuyTicket);
    23         myDelegate += FuWuYuan.BuyMovieTicket;
    24         myDelegate();
    25     }
    26 }

    其实就是让同一个人“做多件事情!”。

  • 相关阅读:
    Rotate List
    Spiral Matrix II
    Jump Game
    Maximum Subarray
    Pow(x, n)
    Anagrams
    Permutations
    unity 相机的问题
    NGUI 学习
    空间数据库1
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4512752.html
Copyright © 2020-2023  润新知