windows程序设计课程作业-1

news2025/1/17 1:17:38

目录

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_dnPr_dw

实现该接口的类需要提供这两个方法的具体实现。

interface IProductionFactory
{
    void Pr_dn();//生产鸭脖
    void Pr_dw();//生产鸭翅
}

 参考讲解:

87 C#教程-接口使用_哔哩哔哩_bilibili

(2)写类具体实现接口

然后去写三个类,分别去具体实现接口和接口内的方法

实现了IProductionFactory接口的WuhanFactory类。该类包含了Pr_dnPr_dw方法的具体实现,分别输出"生产鸭脖"和"生产鸭翅"的信息。

internal class WuhanFactory : IProductionFactory
{
    public void Pr_dn() 
    { 
        Console.WriteLine("生产鸭脖"); 
    }

    public void Pr_dw()
    {
        Console.WriteLine("生产鸭翅");
    }

(3)声明委托

创建实例,最后用委托来实现具体生产的统一管理

    delegate void ProductionDelegate();

(4)创建实例

Main函数中,首先创建了WuhanFactoryNanjingFactoryChangshaFactory的实例,分别赋值给wuhanFactorynanjingFactorychangshaFactory变量。

IProductionFactory wh = new WuhanFactory();
IProductionFactory nj = new NanjingFactory();
IProductionFactory cs = new ChangshaFactory();

(5)实例化委托

然后,定义了一个生产委托productionDelegate,并将wuhanFactory.ProduceDuckNeckwuhanFactory.ProduceDuckWingnanjingFactory.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运行结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1572474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio学习10——资源res的使用

一、String,StringArray的使用 一次修改,多出生效 String StringArray 二、color的使用 颜色代码对应表 和上面的相似用法 三、Dimen(尺寸)的使用 用的少,一般直接写尺寸 四、如何写一个drawable作为背景 五、如何写一个可以改变的drawable(按钮按下…

python爬虫———post请求方式(第十四天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

【Qt 学习笔记】如何在Qt中打印日志 | qDebug的使用 | Assistant的使用

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 如何在Qt中打印日志 | qDebug的使用 文章编号:Qt 学习笔记…

全文更新:什么是Power Path?充电时是充电器供电还是电池供电?

原文来自微信公众号:工程师看海,与我联系:chunhou0820 看海原创视频教程:《运放秘籍》 昨天的文章误删了一部分,很多同学留言想看全文,现补充、更新如下: 前段时间,交流群里有位同学…

【群智能算法改进】一种改进的鹦鹉优化算法 鹦鹉优化器 IPO算法【Matlab代码#73】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始鹦鹉优化算法PO2. 改进后的IPO算法2.1 自适应切换因子2.2 混合柯西和高斯变异 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始鹦鹉优化算法PO 鹦鹉优化算法…

由王雅贤带你深入《DBWGLX vs Ethan_Wang》

vs是versus。 (百度收录我DBWG🙏🙏🙏) 算来篇自传吧。像自我介绍和简历我是完全没写过喵~ 2024年4月6日12:44:53書 本命王雅贤,DBWGLX我的微信号,至于什么意思,吊臂王锅的意思&am…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时,terminal窗口太小怎么办?看起来非常累眼睛,本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求: 通过上图可知,UART默认使用的是xterm。因此,我们需要修改xterm的默认字体设…

sql语句如何在MySQL中执行?

我们先来对MySQL的基础结构进行分析 一、 MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。 简单来说 MySQL 主要分为 Server 层和存储引擎层: Server…

性能分析--内存知识

内存相关知识 计算机中与CPU进行数据交换的桥梁。内存的速度,比CPU的速度要慢很多。比磁盘速度要快很多。内存中存放数据,一旦断电就会消失。linux系统的 /proc路径下的文件,都是内存文件。内存大小,一般 是GB为单位。 现在都操作…

【Pt】马灯贴图绘制过程 04-玻璃脏迹

目录 效果 步骤 一、透明玻璃 二、烟熏痕迹 三、粗糙 四、浮尘 效果 步骤 一、透明玻璃 1. 打开纹理集设置,着色器链接选择“新的着色器链接” 在着色器设置中可以看到此时名称为“Main shader (Copy)” 这里修改名称为“玻璃” 在…

【加密周报】比特币“强烈看涨”信号来了!巨鲸们正疯狂囤积稳定币!SEC呼吁公众对以太币ETF提供意见!

在过去一周里,比特币价格经历了一段下跌,并在随后出现了一些反弹迹象。与此同时,链上数据显示,巨鲸们在囤积稳定币,预示着“强烈的看涨情绪”。以太坊方面,美国证券交易委员会(SEC)已…

异常练习题

第一题:分析题 package chapter09_exception_teacher.src.com.atguigu05.exer.exer2;/*** 输出结果:* 进入方法A* 用A方法的finally* 制造异常* 进入方法B* 调用B方法的finally** author shkstart* create 0:57*/ public class ReturnExceptionDemo {sta…

【算法题】树节点的第 K 个祖先

题目: 给你一棵树,树上有 n 个节点,按从 0 到 n-1 编号。树以父节点数组的形式给出,其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。 树节点的第 k 个祖先节点是从该节点到根节点路径上的第 k 个节点。 实现…

算法 ST表

思想(本质为dp): 题目AcWing1270. 数列区间最大值: 1270. 数列区间最大值 - AcWing题库 输入一串数字,给你 M 个询问,每次询问就给你两个数字 X,Y要求你说出 X到 Y这段区间内的最大数。 输入格式 第一…

Java数据结构队列

队列(Queue) 概念 队列的使用 注意:Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。 import java.util.LinkedList; import java.util.Queue;public class Test {public static void main(String[]…

初识二叉树和二叉树的基本操作

目录 一、树 1.什么是树 2. 与树相关的概念 二、二叉树 1.什么是二叉树 2.二叉树特点 3.满二叉树与完全二叉树 4.二叉树性质 相关题目: 5.二叉树的存储 6.二叉树的遍历和基本操作 二叉树的遍历 二叉树的基本操作 一、树 1.什么是树 子树是不相交的;…

windows server 2019-DHCP服务器搭建

一、DHCP的原理: 1,获得ip的过程 客户机发送请求给所有DHCP服务器 DHCP服务器收到请求后发送响应包给客户机 客户机收到响应包(第一个到达的)后,检验响应包里面的ip能不能用(使用ping的方式&#xff0c…

Ideal的使用技巧

一、springcloud项目如何将多个服务放到services中一起启动 1、打开ideal,再view -> Tool Windows -> services 2、在services界面 找到 run configuration type -> springboot即可 二、配置临时的启动参数 1、在edit configurations中 2、选择相应的服务…

网络原理 - HTTP / HTTPS(5)——https协议

目录 一、HTTPS是什么 为什么要进行加密 二、“加密” 是什么 三、HTTPS的工作过程 (1)引入对称加密 对称密钥的特点: (2)引入非对称加密 非对称加密的特点: (3)中间人攻击…

深入浅出 -- 系统架构之负载均衡Nginx反向代理

一、Nginx反向代理-负载均衡 首先通过SpringBootFreemarker快速搭建一个WEB项目:springboot-web-nginx,然后在该项目中,创建一个IndexNginxController.java文件,逻辑如下: Controller public class IndexNginxControl…