目录
1、作业内容
2、主要思路
(1)写接口
(2)写类具体实现接口
(3)声明委托
(4)创建实例
(5)实例化委托
3、难点分析
1)想明白接口的作用
2)委托的作用
4、实现代码
5、运行结果
1、作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
2、主要思路
(1)写接口
按照要求去写一个接口,里面有生产鸭脖和鸭翅的方法,不用具体实现
定义了一个名为IProductionFactory
的接口,该接口包含了两个方法:Pr_dn
和Pr_dw
。
实现该接口的类需要提供这两个方法的具体实现。
interface IProductionFactory
{void Pr_dn();//生产鸭脖void Pr_dw();//生产鸭翅
}
参考讲解:
87 C#教程-接口使用_哔哩哔哩_bilibili
(2)写类具体实现接口
然后去写三个类,分别去具体实现接口和接口内的方法
实现了IProductionFactory
接口的WuhanFactory
类。该类包含了Pr_dn
和Pr_dw
方法的具体实现,分别输出"生产鸭脖"和"生产鸭翅"的信息。
internal class WuhanFactory : IProductionFactory
{public void Pr_dn() { Console.WriteLine("生产鸭脖"); }public void Pr_dw(){Console.WriteLine("生产鸭翅");}
(3)声明委托
创建实例,最后用委托来实现具体生产的统一管理
delegate void ProductionDelegate();
(4)创建实例
在Main
函数中,首先创建了WuhanFactory
、NanjingFactory
和ChangshaFactory
的实例,分别赋值给wuhanFactory
、nanjingFactory
和changshaFactory
变量。
IProductionFactory wh = new WuhanFactory();
IProductionFactory nj = new NanjingFactory();
IProductionFactory cs = new ChangshaFactory();
(5)实例化委托
然后,定义了一个生产委托productionDelegate
,并将wuhanFactory.ProduceDuckNeck
、wuhanFactory.ProduceDuckWing
、nanjingFactory.ProduceDuckWing
和ChangshaFactory.ProduceDuckNeck
方法依次添加到委托中。
最后,通过调用prodCuctionDelegate.Invoke()
来触发D委托,依次执行委托中包含的各个工厂的生产方法。
ProductionDelegate productionDelegate = wh.Pr_dn;
//利用+=将方法添加到委托的调用列表里
productionDelegate += wh.Pr_dw;
productionDelegate += nj.Pr_dw;
productionDelegate += cs.Pr_dn;productionDelegate.Invoke();
参考讲解:
91 C#教程-委托_哔哩哔哩_bilibili
92 C#教程-委托的多播_哔哩哔哩_bilibili
3、难点分析
1)想明白接口的作用
接口本身并实现任何功能,他只是声明实现该接口的对象必须实现的功能。
所以要实现下面这个功能需要接口来完成。
武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
2)委托的作用
通过委托,可以将多个工厂的生产方法统一管理。调用代码只需要调用委托一次,就可以依次执行多个工厂的生产方法,无需逐个调用每个工厂的方法。这样可以简化代码,提高可读性和可维护性。
同时,他也可以轻松地添加、删除或替换不同工厂的生产方法。
使用+=
操作符可以动态地向委托中添加方法,从而实现对多个方法进行管理和调用。这样可以方便地扩展和修改委托的调用列表,而无需修改调用委托的代码。
productionDelegate += wh.Pr_dw;
4、实现代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace work_test
{delegate void ProductionDelegate();interface IProductionFactory{void Pr_dn();//生产鸭脖void Pr_dw();//生产鸭翅}internal class WuhanFactory : IProductionFactory{public void Pr_dn() { Console.WriteLine("生产鸭脖"); }public void Pr_dw(){Console.WriteLine("生产鸭翅");}}internal class NanjingFactory : IProductionFactory{public void Pr_dw() {Console.WriteLine("生产鸭翅");}public void Pr_dn(){Console.WriteLine("不能生产鸭脖");}}class ChangshaFactory : IProductionFactory{public void Pr_dn() { Console.WriteLine("生产鸭脖"); }public void Pr_dw(){Console.WriteLine("不能生产鸭翅");}}internal class Program{static void Main(string[] args){IProductionFactory wh = new WuhanFactory();IProductionFactory nj = new NanjingFactory();IProductionFactory cs = new ChangshaFactory();ProductionDelegate productionDelegate = wh.Pr_dn;productionDelegate += wh.Pr_dw;productionDelegate += nj.Pr_dw;productionDelegate += cs.Pr_dn;productionDelegate.Invoke();Console.ReadLine();}}
}
5、运行结果