windows程序设计课程作业-1
目录
1、作业内容
2、主要思路
(1)写接口
(2)写类具体实现接口
(3)声明委托
(4)创建实例
(5)实例化委托
3、难点分析
1)想明白接口的作用
2)委托的作用
4、实现代码
5、运行结果
1、作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
作业要求
请以博客方式提交作业,博客内容需要对代码行进行讲解,阐述设计的主要思路与难点。 √ 请注意,如果想达到博客网站如csdn的优质博文的质量分,需要对博客进行详细描述。 √ 提交方式为提交博客发布地址,并附上本博文的质量分。 √ 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、运行结果
vs运行结果
