分分搞懂c#中的委托;

不说废话,不来虚的概念,不管代码是否有意义,看我的优化之路,你会理解委托了;

源代码1

public class test{//我们不管代码是否有意义,我们直接看代码重构和一步步优化的过程int flage = 1;public void show(int a){if (flage == 1){do1(a);}else if (flage == 2){do2(a);}else if (flage == 3){do3(a);}else if (flage == 4){do4(a);}else{}}public void do1(int val){}public void do2(int val){}public void do3(int val){}public void do4(int val){}}

优化一:

public enum flag{a = 1,b = 2,c = 3,d = 4}public class test2{
public void show(int a, flag f){switch (f){case flag.a:do1(a);break;case flag.b:do2(a);break;case flag.c:do3(a);break;case flag.d:do4(a);break;}}public void do1(int val){}public void do2(int val){}public void do3(int val){}public void do4(int val){}}

优化二(委托“现身了”)

public delegate void mydelegate(int val);public class test3{public void show(int a,mydelegate de ){de(a);}public void do1(int val){}public void do2(int val){}public void do3(int val){}public void do4(int val){}}class Program{static void Main(string[] args){test3 t = new test3();t.show(12,t.do2);}}
}

哈哈哈,这下明白了撒!(我们将方法名,当成了一个参数来传递滴呀~)

现在我们才来总结概念!

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

我们也可以将方法绑定到委托上滴呀;

还是直接上代码:

namespace Delegate003
{public delegate void myDelegate(string val);class Program{public static void show(string val,myDelegate de){de(val);}public static void do1(string val ){Console.WriteLine("do1.."+val);}public static void do2(string val){Console.WriteLine("do2..."+val);}public static void do3(string val){Console.WriteLine("do3...'"+val);}static void Main(string[] args){//使用方式一
            myDelegate de1,de2;string val="sth";de1 = do1;de2 = do2;show(val, de1);show(val, de2);Console.ReadLine();//使用方式二//可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法
            myDelegate de;string val2="something";de = do1;de += do2;  //使用-=就是取消绑定de += do3;show(val2, de);Console.ReadLine();//使用方式三,绕过我们的show方法,直接调用;
            myDelegate directMy;string directVal = "direct";directMy = do1;directMy(directVal);  //直接通过调用委托来使用滴呀; //使用方式四;myDelegate delegate1 = new myDelegate(do1);string val4 = "val4";delegate1(val4);//使用方法五
}}
}

现在再来看看总结我们的概念滴呀;

使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

转载于:https://www.cnblogs.com/mc67/p/5068145.html

分分搞懂c#中的委托相关推荐

  1. 一文彻底搞懂 Kotlin 中的委托 | 开发者说·DTalk

    本文原作者: 码农西哥,原文发布于微信公众号: 技术最TOP  https://mp.weixin.qq.com/s/BD1zT80IADDZS4CAxmooPg 什么是委托? 委托,也就是委托模式, ...

  2. 彻底搞懂 JS 中 this 机制

    彻底搞懂 JS 中 this 机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 目录 this 是什么 this 的四种绑定规 ...

  3. 15个示例让你搞懂Linux中的cd命令

    15个示例让你搞懂Linux中的cd命令 在Linux中,cd(更改目录)命令是新手和系统管理员最重要且使用最广泛的命令之一.对于没有头绪的管理员来说,cd是导航到其他目录以检查日志,执行程序/应用程 ...

  4. java 自旋锁_搞懂Java中的自旋锁

    轻松搞懂Java中的自旋锁 前言 在之前的文章<一文彻底搞懂面试中常问的各种"锁">中介绍了Java中的各种"锁",可能对于不是很了解这些概念的同学 ...

  5. 一文搞懂Qt中的颜色渐变(QGradient Class)

    一文搞懂Qt中的颜色渐变(QGradient Class) 1, 快速开始! Qt中与颜色渐变有关的类是QGradient 其中它又有三个子类:QLinearGradient.QRadialGradi ...

  6. 帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    帮你彻底搞懂JS中的prototype.__proto__与constructor(图解) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文 ...

  7. 这一篇彻底搞懂JS中的prototype、__proto__与constructor真的很好

    文章目录 1. 前言 2. _ _ proto _ _ 属性 3. prototype属性 4. constructor属性 5. 总结 提示:不要排斥,静下心来,认真读完,你就搞懂了!(可以先看一下 ...

  8. (转)帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    文章目录 1. 前言 2. _ _ proto _ _ 属性 3. prototype属性 4. constructor属性 5. 总结 提示:不要排斥,静下心来,认真读完,你就搞懂了!(可以先看一下 ...

  9. 彻底搞懂javascript中的replace函数

    javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...

最新文章

  1. Confluence 6 配置服务器基础地址
  2. 理解 Delphi 的类(十) - 深入方法[28] - 递归函数实例: 搜索当前目录下的所有嵌套目录...
  3. 【深度学习】数形结合的图像处理(文末介绍了一种新型网络)
  4. 2020年“内容、服务”征集
  5. cocos2dx 调用oc java_cocos2dx 调用浏览器打开网址
  6. 经典排序算法 - 冒泡排序Bubble sort
  7. /etc/resolv.conf root用户下不能修改
  8. 女神一秒变路人!腾讯研究AI卸妆效果算法出品“一键卸妆”功能
  9. [Bzoj4540][Hnoi2016] 序列(莫队 + ST表 + 单调队列)
  10. 【送给读者】全新苹果 AirPods,包邮送一套!
  11. vscode 语法检查_Jenkins 声明式流水线的语法错误检查
  12. cmd 修改ie快捷方式_windows使用技巧之Win + R 与 CMD 的不同
  13. webApp调试页面的几种方式
  14. golang调用c++的dll库文件
  15. APUE---chap3文件I/O---3.11原子操作
  16. 阿里云 ECS迁移数据至腾讯云云服务器
  17. Android自动接听来电并录音
  18. 一位非米粉关于小米的深度报告
  19. Mariadb指定数据库进行主备,无法恢复数据异常总结
  20. 第一代云原生企业米哈游如何让想象发生?

热门文章

  1. android回传数据实验报告,传热综合实验实验报告.doc
  2. Dynamics crm2013 IFD部署后启用多组织
  3. Dynamics CRM2013 Server2012R2下部署ADFS和IFD遇到的问题
  4. 如何在 JIRA 中创建自己的仪表板(Dashboard)
  5. JavaWeb实用项目之----化妆品销售网
  6. 爬梯:MongoDB入门到高级到SpringBoot-API
  7. jupyter修改工作路径提示找不到指定模块
  8. android 倒影图片的生成
  9. stm32使用XR20M1172详细攻略·SPI转UART串口
  10. 淘客基地免费商城CMS增加拾牛APP下载公告