首页 > 编程语言 >C#关于委托的理解

C#关于委托的理解

时间:2024-03-19 10:46:39浏览次数:28  
标签:Console 委托 C# void 理解 static WriteLine 生产

举个简单的例子,比如苹果手机的生产是委托的富士康进行代工,此时出现了另外一家效率更高的代工厂A,在生产手机流程不变的形况下,使用委托能够快速完成代工厂的更换。

查看代码

/// <summary>
/// 定义一个iphone生产的委托
/// </summary>
public delegate void IphoneProduce();

static void Main(string[] args)
{
    //设计一个手机设计,生产,销售流程
    Console.WriteLine("Iphone 设计好了");
    Program program = new Program(); 
     //不使用委托
    program.fun2();
    //使用委托
    //IphoneProduce myDelegate = new IphoneProduce(program.fun1);
    //myDelegate();
    
    Console.WriteLine("Iphone可以销售了");
}

//定义两个生产的方法
public void fun1() {
    Console.WriteLine("富士康生产好了Iphone");
}
public void fun2()
{
    Console.WriteLine("华强北生产好了Iphone");
}

上面这个例子并不能真正理解到委托的用途,Main方法中可以直接调用生产的方法。学习的时候就会觉得为什么不直接调用,而多此一举用一个委托。

然后委托最大的好处是,将不变的封装起来,隔离变化,让软件更易于维护。

查看代码
 
 static void Main(string[] args)
 {
     ProducePhone(Iphone11);
 }

 /// <summary>
 /// 定义一个iphone生产的委托
 /// </summary>
 public delegate void IphoneProduce();

/// <summary>
/// 定义一个生产手机的流程
/// </summary>
/// <returns></returns>
static void ProducePhone(IphoneProduce iphoneProduce) {

    Console.WriteLine("设计图出来了");
    Console.WriteLine("交给了工厂生产");
    iphoneProduce();
    Console.WriteLine("可以销售了");
}

static void Iphone10() {
    Console.Write("工厂生产了iphone10");
}

static void Iphone11()
{
    Console.Write("工厂生产了iphone11");
}

static void Ipad() {
    Console.WriteLine("工厂生产了Ipad");
}

我们传入一个委托作为参数,封装好制造流程,当我们想生产其他型号的手机的时候,只需要写相应手机的代码,直接传入到制造手机的流程中去,就可以生产出相应品牌的手机,而生产流程不会发生变化。

标签:Console,委托,C#,void,理解,static,WriteLine,生产
From: https://www.cnblogs.com/xwzyac/p/18082193

相关文章

  • C++STL第五篇(链表List的使用方法)
    list链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相......
  • My Interview Experience at Google --- 转
    MyInterviewExperienceatGoogle[L5Offer]看看Google都面啥原文第一轮DSA(45分钟)树,后序遍历,拓扑排序在面试过程中,面试官在代码编辑器中分享了一个很长的问题,并让我阅读。阅读完毕后,我问了几个澄清问题以更好地理解问题。一旦我清楚地理解了问题,我建议使用树作为数据......
  • TP6 使用 nusoap为第三方webservice调用插件
    composer下载插件composerrequirenusoap/nusoapuseNuSoap\Client\Client;classIndexextendsBaseController{/****/publicfunctionindex(){//WebService的WSDL地址$wsdl='http://xxx.ygys.net/ResumeServ......
  • Clickhouse TGZ安装方式的卸载(Clickhouse重装失败)
    1.停止ClickHouse服务sudoserviceclickhouse-serverstop2.删除所有的数据和日志文件sudorm -rf/var/lib/clickhouse/sudorm -rf/var/log/clickhouse-server/3.如果你使用的是systemd来管理服务,你可以通过以下命令来停止并删除服务sudosystemctlstopclickhouse-serv......
  • 微信小程序:解决chooseImage:fail unknouwn scene报错
    我自己用的是安卓的,在某些苹果机上正常运行,但在我一个朋友的11上就报这个错: 开始以为是隐私协议的问题,我就把隐私协议打开了: 但是错误依然,我就谷歌了一下,发现,这是个微信的bug。。https://developers.weixin.qq.com/community/develop/article/doc/000840f94fc390bc8d0c......
  • 【永嘉原厂】LCD抗干扰液晶段码屏显示驱动芯片VK2C22A/B 适用于单相电表,水表,瓦斯表,热
    I²C 接口LCD 控制及驱动IC型号:VK2C22A:RAM 映射 44*4封装(LQFP-52) LCD液晶显示驱动VK2C22B:RAM 映射 40*4封装(LQFP-48) LCD液晶显示驱动裸片:DICE(邦定COB)/COG(绑定玻璃用)原厂直销,工程服务,技术支持,价格最具优势!VK2C22A/B概述:      VK2C22A/B是一个点阵......
  • 阿里ModelScope应用案例-cnblog
    ​信息抽取(实体识别)分词人像抠图摘要生成人体关键点表格搜索文本分类自然语言理解人像卡通化人像增强算法图文检索大模型与Agent文字识别......
  • node 使用 redlock 分布式锁
    'usestrict';constService=require('egg').Service;constmoment=require('moment');constredis=require('redis');constRedlockClass=require('redlock');const{port,host,password}=require(&#......
  • DS-CDMA通信系统误码率matlab仿真,包括QPSK调制解调和扩频解扩
    目录1.QPSK调制解调2.扩频与解扩3.MATLAB程序DS-CDMA是一种多址接入技术,它允许多个用户在同一频段和时间内进行通信。每个用户都被分配一个独特的扩频码(通常是伪随机噪声码),用于在发送端对数据进行扩频,并在接收端进行解扩以恢复原始数据。DS-CDMA(DirectSequence—CodeDivis......
  • 692、基于51单片机的自行车(调速,LCD1602)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能自行车调速系统1、使用LCD1602显示当前速度和设置速度2、使用电位器设置当前速度,模拟把手调速3、按键启停系统4、速度控制......