使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理

一.作业内容

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

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

二.作业目的

掌握接口和委托的相关知识,能够自己写出接口和委托的大致程序框架,并能够运用相关知识解决一些简单的代码问题。

三.相关知识点

3.1接口

C#中的接口(Interface)是一种引用类型,它定义了一组方法、属性、事件或索引器的契约,但不提供实现。接口可以被类或其他接口实现,从而实现该接口定义的所有成员。接口的主要作用是定义一种规范或协议,使得不相关的类可以应用同一个实现方式不同的方法。接口可以有效避免程序中因多次引用相同的方法而造成的代码冗余。

3.2委托

C# 中的委托(Delegate)是一种类型,它安全地封装了方法的签名和方法的引用。委托类似于 C 或 C++ 中的函数指针,但它们是类型安全的,并且是面向对象的。委托允许将方法作为参数传递,或者将方法赋值给变量,从而实现回调和事件驱动程序设计。

四.代码实现思路

1.首先,根据题目的要求,我们需要定义接口IProductionFactory和委托ProductionDelegate,其中接口IProductionFactory我们新定义两个分别生产鸭脖和鸭翅的方法。

public delegate void ProductionDelegate();  //定义委托

public interface IProductionFactory  //定义接口
{
    void Production鸭脖();  //定义两个方法
    void Production鸭翅();
}

2.然后,新定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口IProductionFactory,用于具体的生产工厂。

public class WuhanFactory: IProductionFactory  //定义武汉类实现接口
{
    public void Production鸭脖()  //实现类中接口的方法
    {
        Console.WriteLine("武汉工厂生产鸭脖");
    }
    public void Production鸭翅()
    {
        Console.WriteLine("武汉工厂生产鸭翅");
    }
}
public class NanjingFactory: IProductionFactory  //定义南京类实现接口
{
    public void Production鸭脖()
    {
        Console.WriteLine("南京工厂不能生产鸭脖");
    }
    public void Production鸭翅()
    {
        Console.WriteLine("南京工厂生产鸭翅");
    }
}
public class ChangshaFactory : IProductionFactory  //定义长沙类实现接口
{
    public void Production鸭脖()
    {
        Console.WriteLine("长沙工厂生产鸭脖");
    }
    public void Production鸭翅()
    {
        Console.WriteLine("长沙工厂不能生产鸭翅");
    }
}

需要注意,根据题目要求,武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。因此在实现类中接口的方法时,对于同一个方法这三个不同的类有不同的定义。

3.然后,我们在 Main 函数中创建不同工厂的实例,并通过生产委托进行生产。 

(1)首先需要创建不同工厂的实例:

//创建工厂实例
IProductionFactory wuhanfactory = new WuhanFactory(); 
IProductionFactory nanjingfactory = new NanjingFactory();
IProductionFactory changshafactory = new ChangshaFactory();

(2)然后我们开始定义生产鸭脖和鸭翅的委托。在这个部分我分别定义了三个不同类的两个不同方法,并直接将其结果输出,以便于观察。

//定义生产鸭脖的委托并输出
ProductionDelegate product鸭脖 = wuhanfactory.Production鸭脖;
product鸭脖.Invoke();  //武汉工厂生产鸭脖
product鸭脖 = nanjingfactory.Production鸭脖;
product鸭脖.Invoke();  //南京工厂生产鸭脖
product鸭脖 = changshafactory.Production鸭脖;
product鸭脖.Invoke();  //长沙工厂生产鸭脖
Console.WriteLine();

//定义生产鸭翅的委托并输出
ProductionDelegate product鸭翅 = wuhanfactory.Production鸭翅;
product鸭翅.Invoke();  //武汉工厂生产鸭翅
product鸭翅 = nanjingfactory.Production鸭翅;
product鸭翅.Invoke();  //南京工厂生产鸭翅
product鸭翅 = changshafactory.Production鸭翅;
product鸭翅.Invoke();  //长沙工厂生产鸭翅
Console.WriteLine();

其中Console.WriteLine();是输出空行,用于分割不同部分的不同输出,便于观察。

(3)最后通过生产委托进行生产

//通过生产委托进行生产
product鸭脖.Invoke();
product鸭翅.Invoke();
Console.ReadLine();

记得在代码最后需要写上Console.ReadLine();否则代码的运行窗口无法停留,会一闪而过。

至此,此题的整体代码就大致完成了,下面我们可以看一下完整的可运行代码。

五.完整的代码

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

namespace 周黑鸭
{
    public delegate void ProductionDelegate();  //定义委托

    public interface IProductionFactory  //定义接口
    {
        void Production鸭脖();  //定义两个方法
        void Production鸭翅();
    }
    public class WuhanFactory: IProductionFactory  //定义武汉类实现接口
    {
        public void Production鸭脖()  //实现类中接口的方法
        {
            Console.WriteLine("武汉工厂生产鸭脖");
        }
        public void Production鸭翅()
        {
            Console.WriteLine("武汉工厂生产鸭翅");
        }
    }
    public class NanjingFactory: IProductionFactory  //定义南京类实现接口
    {
        public void Production鸭脖()
        {
            Console.WriteLine("南京工厂不能生产鸭脖");
        }
        public void Production鸭翅()
        {
            Console.WriteLine("南京工厂生产鸭翅");
        }
    }
    public class ChangshaFactory : IProductionFactory  //定义长沙类实现接口
    {
        public void Production鸭脖()
        {
            Console.WriteLine("长沙工厂生产鸭脖");
        }
        public void Production鸭翅()
        {
            Console.WriteLine("长沙工厂不能生产鸭翅");
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            //创建工厂实例
            IProductionFactory wuhanfactory = new WuhanFactory(); 
            IProductionFactory nanjingfactory = new NanjingFactory();
            IProductionFactory changshafactory = new ChangshaFactory();

            //定义生产鸭脖的委托并输出
            ProductionDelegate product鸭脖 = wuhanfactory.Production鸭脖;
            product鸭脖.Invoke();  //武汉工厂生产鸭脖
            product鸭脖 = nanjingfactory.Production鸭脖;
            product鸭脖.Invoke();  //南京工厂生产鸭脖
            product鸭脖 = changshafactory.Production鸭脖;
            product鸭脖.Invoke();  //长沙工厂生产鸭脖
            Console.WriteLine();

            //定义生产鸭翅的委托并输出
            ProductionDelegate product鸭翅 = wuhanfactory.Production鸭翅;
            product鸭翅.Invoke();  //武汉工厂生产鸭翅
            product鸭翅 = nanjingfactory.Production鸭翅;
            product鸭翅.Invoke();  //南京工厂生产鸭翅
            product鸭翅 = changshafactory.Production鸭翅;
            product鸭翅.Invoke();  //长沙工厂生产鸭翅
            Console.WriteLine();

            //通过生产委托进行生产
            product鸭脖.Invoke();
            product鸭翅.Invoke();
            Console.ReadLine();

        }
    }
}

代码gitee网址:https://gitee.com/ydn777/

六.代码运行结果

下面是本文代码在VS中运行得到的结果:

其中第一段输出的是三个工厂分别生产鸭脖的委托,第二段输出的是三个工厂分别生产鸭翅的委托;最后一段是格外进行的两条生产鸭脖和鸭翅的委托代码的输出,可以观察到,当我们想要直接输出委托时,输出语句调用的是上文中最后定义的那个委托所对应的内容。

七.收获与小结

本次作业我们使用 C# 编码(涉及类、接口、委托等关键知识点),实现了对周黑鸭工厂的产品生产统一管理。作业的主要目的是让我们学会运用类,接口和委托的相关知识解决一些简单的实际问题,在编写代码的过程中,我学会了如何去定义和运用接口及委托。使用类和接口可以使我们在不同的类中使用同一种方法,并且不用在每个类中都重新在定义一次,还能让不同类中使用的同种方法有不同的内容,这大大简化了代码,避免了程序冗余。

本题中,我使用接口定义了Production鸭脖和Production鸭翅这两个方法,并在定义三个类 WuhanFactory、NanjingFactory、ChangshaFactory时将该接口进行实现。在不同的类中,由于题目给出的每个工厂的名字不同,生产的产品也不同,所以Production鸭脖和Production鸭翅这两个方法在不同类中所包含的内容也不同。运用了接口,我们就可以更简便的在不同工厂类中使用同一种生产产品的方法,而不用一遍遍的重复定义,这使代码能够更加简单清晰。最后,我使用委托调用了目标函数方法并输出了相应结果,完成了题目中的要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值