C#windows程序设计课程作业一—周黑鸭工厂管理

1、作业内容

使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:

  1. 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
  2. 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
  3. 使用委托 ProductionDelegate 定义生产委托。
  4. 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。

对于实现要求分析

  本题主要考察对于c#的基本语法的练习实现最要针对三个方面来考察。分别是接口的实现,委托,以及对于异常的抛出这三方面进行考察。在完成这个题目之前我们要先对这三个基础语法有一定的了解。

1.接口

    在C#中,接口(Interface)是一种引用类型,它类似于类,但是与类不同的是,接口不能直接实例化。接口定义了一组方法、属性、事件或索引器的签名,但不包含它们的实现。实现接口的类必须提供接口中定义的所有成员的具体实现。有着许多的特点比如:抽象性(不可被实例化),可以实现多重继承(一个类可以有多个接口)等特点。以下是本题中对于接口的定义:

public interface IProductionFactory
{  
    void ProduceDuckNeck();  
    void ProduceDuckWing();  
}

这里定义了一个名字为IProduction的接口含有两个方法,分别用来表示生产鸭脖和鸭翅的具体实现。

public class Wuhan : IProductionFactory
{  
    public void ProduceDuckNeck()  
    {  
        Console.WriteLine("武汉工厂生产鸭脖");  
    }  
  
    public void ProduceDuckWing()  
    {  
        Console.WriteLine("武汉工厂生产鸭翅");  
    }  
}  
  

这里就是本题中在Wuhan这个类中实现了接口,并给出了接口方法的集体实现,完成了题目要求的在武汉工厂生产鸭脖和鸭翅。

总结:接口是编程中一种强大的抽象机制,它定义了方法的契约,允许不同的类实现相同的方法。通过使用接口,可以实现多态性、多重继承、抽象与封装、插件式架构以及依赖倒置原则等。接口在构建可扩展、可维护、灵活的应用程序方面发挥着重要作用。

2.抛出异常

   在C#中,异常(Exception)是一种用于处理运行时错误或异常情况的机制。当程序执行过程中发生某些错误条件时,如无效的输入、文件找不到、网络故障等,程序会抛出一个异常。这种机制有助于程序更加健壮和可靠,因为它可以在错误发生时采取适当的行动,而不是简单地崩溃或产生不可预测的结果。在本题中:异常处理的过程主要体现在南京工厂NanjingFactory和长沙工厂Changshafactory的不支持生产方法上。这两个工厂类分别对于不支持的生产方法抛出了NotSupportedException异常。

 
  
public class NanjingFactory : IProductionFactory  
{  
    public void ProduceDuckNeck()  
    {  
        throw new NotSupportedException("南京工厂不能生产鸭脖");  
    }  
  
    public void ProduceDuckWing()  
    {  
        Console.WriteLine("南京工厂生产鸭翅");  
    }  
}  
  
public class ChangshaFactory : IProductionFactory  
{  
    public void ProduceDuckNeck()  
    {  
        Console.WriteLine("长沙工厂生产鸭脖");  
    }  
  
    public void ProduceDuckWing()  
    {  
        throw new NotSupportedException("长沙工厂不能生产鸭翅");  
    }  
}
 // 南京工厂只能生产鸭翅  
        try  
        {  
            produceDuckNeck(nanjingFactory); // 这将抛出异常  
        }  
        catch (NotSupportedException ex)  
        {  
            Console.WriteLine(ex.Message);  
        }  
        produceDuckWing(nanjingFactory);  
  
        // 长沙工厂只能生产鸭脖  
        produceDuckNeck(changshaFactory);  
        try  
        {  
            produceDuckWing(changshaFactory); // 这将抛出异常  
        }  
        catch (NotSupportedException ex)  
        {  
            Console.WriteLine(ex.Message);  
        }  
    }  

总结:异常处理是编程中不可或缺的一部分,它能够提高程序的稳定性和可靠性。通过合理使用异常处理机制,程序员可以确保程序在遇到错误时能够采取适当的措施,从而提供更好的用户体验和更健壮的应用程序。

3.委托处理

   在C#中,委托(Delegate)是一种特殊的类型,它代表对具有特定参数列表和返回类型的方法的引用。 以下是本题中对于委托的定义

public delegate void ProductionDelegate(IProductionFactory factory);

    委托实例可以通过直接赋值一个与委托签名匹配的方法,或者通过new关键字和委托构造函数来创建。以下是本题的委托实例化:

 ProductionDelegate produceDuckNeck = new ProductionDelegate(ProduceDuckNeck);
 ProductionDelegate produceDuckWing = new ProductionDelegate(ProduceDuckWing);

总结:委托是c#中一种强大的工具它允许程序员以灵活的方式处理方法和函数调用。通过委托,可以实现回调、事件处理、异步编程等高级功能,从而增强应用程序的可维护性和可扩展性。理解委托的工作原理和用法是掌握C#编程的重要一环。

4.最后的实现结果

vs代码运行结果图 

5.最终代码 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp5
{
    public interface IProductionFactory
    {
        void ProduceDuckNeck();
        void ProduceDuckWing();
    }
    public class WuhanFactory : IProductionFactory
    {
        public void ProduceDuckNeck()
        {
            Console.WriteLine("武汉工厂生产鸭脖");
        }

        public void ProduceDuckWing()
        {
            Console.WriteLine("武汉工厂生产鸭翅");
        }
    }

    public class NanjingFactory : IProductionFactory
    {
        public void ProduceDuckNeck()
        {
            throw new NotSupportedException("南京工厂不能生产鸭脖");
        }

        public void ProduceDuckWing()
        {
            Console.WriteLine("南京工厂生产鸭翅");
        }
    }

    public class ChangshaFactory : IProductionFactory
    {
        public void ProduceDuckNeck()
        {
            Console.WriteLine("长沙工厂生产鸭脖");
        }

        public void ProduceDuckWing()
        {
            throw new NotSupportedException("长沙工厂不能生产鸭翅");
        }
    }
    public delegate void ProductionDelegate(IProductionFactory factory);
    class Program
    { 
        static void Main(string[] args)
        {
            // 创建工厂实例  
            IProductionFactory wuhanFactory = new WuhanFactory();
            IProductionFactory nanjingFactory = new NanjingFactory();
            IProductionFactory changshaFactory = new ChangshaFactory();

            // 定义生产委托并调用  
            ProductionDelegate produceDuckNeck = new ProductionDelegate(ProduceDuckNeck);
            ProductionDelegate produceDuckWing = new ProductionDelegate(ProduceDuckWing);

            // 武汉工厂可以生产鸭脖和鸭翅  
            produceDuckNeck(wuhanFactory);
            produceDuckWing(wuhanFactory);

            // 南京工厂只能生产鸭翅  
            try
            {
                produceDuckNeck(nanjingFactory); // 这将抛出异常  
            }
            catch (NotSupportedException ex)
            {
                Console.WriteLine(ex.Message);
            }
            produceDuckWing(nanjingFactory);

            // 长沙工厂只能生产鸭脖  
            produceDuckNeck(changshaFactory);
            try
            {
                produceDuckWing(changshaFactory); // 这将抛出异常  
            }
            catch (NotSupportedException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        static void ProduceDuckNeck(IProductionFactory factory)
        {
            factory.ProduceDuckNeck();
        }

        static void ProduceDuckWing(IProductionFactory factory)
        {
            factory.ProduceDuckWing();
        }
    }
}

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值