C#关于委托的理解

举个简单的例子,比如苹果手机的生产是委托的富士康进行代工,此时出现了另外一家效率更高的代工厂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");
}

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

posted @ 2024-03-19 10:34  行稳致远ac  阅读(22)  评论(0)    收藏  举报