• C# 委托 delegate 的理解


    1.什么是委托

    委托就是委托某个方法来实现具体的功能,类似于:甲方委托乙方去实现需求;出租房屋人委托中介为其出租房屋。

    委托是一种引用类型,从数据结构上来讲:委托和类一样,都是一直用户自定义类型。

    2:委托的实现

    委托是对方法的抽象和封装。委托对象实质上代表了方法的引用(即内存地址)他存储的就是一系列具有相同签名和返回类型的方法的地址

    可以理解为函数的一个包装,它使得c#中的函数可以作为参数来被传递

    使用时遵循三步走原则:定义委托、实例化委托,调用委托

    调用委托时,委托包含的方法将被执行

    委托有三种方法:命名方法委托、多播委托、匿名委托

     命名法委托

    1. 1:定义委托
    2. 修饰符 delegate 返回值类型 委托名 {参数列表}
    3. public delegate void FirstDelegate ();

     静态方法的实例化委托 

    1. 2:实例化委托
    2. 委托名 委托对象名=new 委托名{方法名}
    3. FirstDelegate firstDelegate=new FirstDelegate(Test.First);
    4. 委托的方法可以是静态方法的名称,也可以是实例化方法的名称
    5. 方法:
    6. public class Test
    7. {
    8. public static void First()
    9. {
    10. Console.WriteLine("第一次实现静态方法类的委托");
    11. }
    12. }
    13. 3:调用
    14. firstDelegate();

    实例化方法的委托

    1. 2:实例化委托
    2. 委托名 委托对象名=new 委托名{方法名}
    3. FirstDelegate firstDelegate=new FirstDelegate(new Test().First);
    4. 委托的方法可以是静态方法的名称,也可以是实例化方法的名称
    5. 方法:
    6. public class Test
    7. {
    8. public void First()
    9. {
    10. Console.WriteLine("第一次实现实例化方法类的委托");
    11. }
    12. }
    13. 3:调用
    14. firstDelegate();

    多播委托 

     多播委托就是一个委托中注册多个方法,在注册方法时可以在委托中通过加号或则减号来实现添加或者撤销的方法。

    例如 我想买饭吃 又想和奶茶 还想吃蛋糕,我委托一个人完不成,我需要委托三个人帮我完成,例如美团

    1. 1:定义委托
    2. public class problem
    3. {
    4. public delegate void BuyDelegate();
    5. static void mian()
    6. {
    7. BuyDelegate buyDelegate=new BuyDelegate(Buy.BuyFood);
    8. buyDelegate+=Buy.BuyCake;
    9. buyDelegate+=Buy.BuyTea;
    10. buyDelegate();
    11. }
    12. }
    13. public class Buy
    14. {
    15. public void BuyFood()
    16. {
    17. Conssole.WriyeLine("买个螺狮粉");
    18. }
    19. public void BuyCake()
    20. {
    21. Conssole.WriyeLine("买个蛋糕");
    22. }
    23. public void BuyTea()
    24. {
    25. Conssole.WriyeLine("买杯奶茶");
    26. }
    27. }

    匿名委托

    匿名委托就是 使用匿名的方法注册在委托上 ,实际上就是委托中通过定义代码块来实现委拖的作用

    1. 1:定义委托
    2. 修饰符 delegate 返回值类型 委托名(参数列表)
    3. 2:实例化委托
    4. 委托名 委托对象=delegate
    5. {
    6. 代码块;
    7. };
    8. 3:调用匿名委托
    9. 委托对象(参数列表);
    1. 1:实现水果买卖
    2. public class program
    3. {
    4. public delegate void BuyFruit(double price,double count)
    5. static void main(string[] arg)
    6. {
    7. BuyFurit buyFruit=delegate
    8. {
    9. Console.WriteLine("水果总价为"+price*count);
    10. };
    11. buyFruit(3,5);
    12. }
    13. }

    什么时候适用委托

    1:委托相当于用方法作为另一方法参数,同时,也可以实现在两个不能直接调用的方法中做桥梁,如在多线程中的跨线程的方法调用就得用委托。

    2:委托使得一个方法可以作为另一个方法的参数进行传递,这就是委托最大的作用。使用委托可以将同类型的方法绑定到同一个变量上,当调用此变量时就可以一次调用绑定的方法,很方便。

     

     

     

  • 相关阅读:
    《数据结构、算法与应用C++语言描述》-栈的应用-开关盒布线问题
    sqlalchemy event监听
    华为数通方向HCIP-DataCom H12-831题库(多选题:41-60)
    Python笔记3-正则表达式
    Laravel依赖注入全解析:构建灵活应用的秘诀
    【无标题】
    esbuild中文文档-基础配置项(General options - Tsconfig、Tsconfig raw)
    ASEMI-GBJ3510新能源专用整流桥
    STM32H750之FreeRTOS学习--------(六)FreeRTOS的列表和列表项
    Unity Transform.Find() 和 Gameobject.Find()
  • 原文地址:https://blog.csdn.net/hyyjiushiliangxing/article/details/126023406