windows程序设计课程作业-1

发布于:2024-04-06 ⋅ 阅读:(114) ⋅ 点赞:(0)

目录

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运行结果

 


网站公告

今日签到

点亮在社区的每一天
去签到