windows程序设计课程作业一:使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理。

目录

一、功能说明

二、定义接口

1、接口的介绍

2、代码实现

三、实现接口的具体工厂类

1、类主要特点

2、操作思路

3、代码实现——武汉工厂(WuHanFactory)

4、代码实现——南京工厂(NanJingFactory)

5、代码实现——长沙工厂(ChangShaFactory) 

四、定义生产委托 

1、委托定义

2、定义委托注意事项

五、主函数

六、完整代码

七、运行结果

八、总结


一、功能说明

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

具体要求如下:

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

二、定义接口

1、接口的介绍

接口的语法结构: [访问修饰符] interface 接口标识符 [:基接口列表] {     接口体; }

  1. 接口成员访问权限为public,但不能加访问修饰符。
  2. 接口成员不能有定义。
  3. 接口的成员必须是方法,属性,事件或索引器,不能包含常数、字段、运算符、实例构造函数、析构函数或类型。

接口实现:类要继承某个接口用“:”,在类的定义中给出接口中所定义方法的实际实现。除显示实现接口外,类中接口实现必须显示声明为public。

2、代码实现

定义接口IProductionFactory,包含生产鸭脖和鸭翅的方法

  • interface IProdutionFactory:这一行声明了一个名为 IProdutionFactory 的接口。接口定义了一组方法,这些方法由实现接口的类来实现。
  • void ProduceDuck_necks();:在接口中声明了一个名为 ProduceDuck_necks 的方法,它没有返回值(void 表示无返回值),这个方法应该由实现接口的类来实现,用于生产鸭脖。
  • void ProduceDuck_wings();:同样,这也是一个无返回值的方法声明,名为 ProduceDuck_wings,它应该由实现接口的类来实现,用于生产鸭翅。
    interface IProductionFactory//定义接口IProductionFactory,包含生产鸭脖和鸭翅的方法
    {
        void ProduceDuck_necks();//定义生产鸭脖的方法
        void ProduceDuck_wings();//定义生产鸭翅的方法
    }

三、实现接口的具体工厂类

1、类主要特点

在C#中,(Class)是一个非常重要的概念,它构成了面向对象编程(OOP)的基石。类具有以下主要特点:

  1. 对象的模板:类是用于创建对象的模板。它定义了对象的属性(即字段或数据成员)和行为(即方法或函数成员),以及可能的初始状态(通过构造函数)和销毁操作(通过析构函数)。这使得类能够创建具有特定属性和行为的自定义数据类型。
  2. 封装性:类提供了封装机制,将数据和相关的操作(即方法)封装在一起。这种封装隐藏了内部实现细节,只暴露对外的接口。这增加了代码的可维护性和安全性,因为外部代码只能通过类的公共接口来访问和操作内部数据,而无法直接访问其内部状态。
  3. 继承性:C#中的类支持继承关系。一个类(称为派生类或子类)可以继承另一个类(称为基类或父类)的属性和行为。通过继承,子类可以扩展、修改或重写父类的功能。这种继承机制有助于在类之间建立层次结构,实现代码的重用和扩展。
  4. 多态性:多态性是面向对象编程的重要特性之一。在C#中,类通过继承和接口实现多态性。这意味着可以使用基类或接口引用来引用具体的子类对象,并根据实际对象类型调用相应的方法。这种灵活性使得代码更加可维护和可扩展。
  5. 实例化:类本身只是一个模板或类型定义,并不能直接使用。要使用类创建对象,需要实例化类,生成对象的实例。每个实例都有其自己的属性和状态,可以独立地进行操作。

2、操作思路

创建了三个具体的工厂类(WuHanFactoryNanJingFactoryChangShaFactory),每个类都实现了 IProductionFactory 接口。这些工厂类负责实现具体的生产逻辑。

3、代码实现——武汉工厂(WuHanFactory

  • class WuHanFactory : IProductionFactory:这里声明了一个名为 WuHanFactory 的类,并指定它实现了 IProductionFactory 接口。这意味着 WuHanFactory 类必须提供 IProductionFactory 接口中声明的所有方法的具体实现。
  • public void ProduceDuck_necks():这是 ProduceDuck_necks 方法的实现。当调用这个方法时,它会使用 Console.WriteLine 方法在控制台上输出一条消息,表明是武汉工厂生产的鸭脖。
  • public void ProduceDuck_wings():这是 ProduceDuck_wings 方法的实现。同样,当调用这个方法时,它会使用 Console.WriteLine 方法在控制台上输出一条消息,表明是武汉工厂生产的鸭翅。
     class WuHanFactory : IProductionFactory
    {
        public void ProduceDuck_necks()//定义武汉工厂实现生产鸭脖的方法
        {
            Console.WriteLine("武汉工厂生产的鸭脖");
        }
        public void ProduceDuck_wings()//定义武汉工厂实现生产鸭翅的方法
        {
            Console.WriteLine("武汉工厂生产的鸭翅");
        }
    }

4、代码实现——南京工厂(NanJingFactory

  • class NanJingFactory : IProductionFactory:这里声明了一个名为 NanJingFactory 的类,并指定它实现了 IProductionFactory 接口。这意味着 NanJingFactory 类必须提供 IProductionFactory 接口中声明的所有方法的具体实现。
  • public void ProduceDuck_necks():这是 ProduceDuck_necks 方法的实现。但是,这里并没有实现生产鸭脖的逻辑。相反,它使用 throw 关键字抛出了一个 NotImplementedException 异常。异常信息为“抱歉,南京工厂不生产鸭脖!”,这表示南京工厂并不具备生产鸭脖的能力。如果调用这个方法,程序会抛出异常并停止执行。
  • public void ProduceDuck_wings():这是 ProduceDuck_wings 方法的实现。当调用这个方法时,它会使用 Console.WriteLine 方法在控制台上输出一条消息,表明是南京工厂生产的鸭翅。
     class NanJingFactory : IProductionFactory
    {
        public void ProduceDuck_necks()//定义南京工厂实现生产鸭脖的方法
        {
            throw new NotImplementedException("抱歉,南京工厂不生产鸭脖!"); 
            //南京工厂不生产鸭脖,抛出 NotImplementedException 异常。
        }
        public void ProduceDuck_wings()//定义南京工厂实现生产鸭翅的方法
        {
            Console.WriteLine("南京工厂生产的鸭翅");
        }
    }

5、代码实现——长沙工厂(ChangShaFactory) 

  • class ChangShaFactory : IProductionFactory:这里声明了一个名为 ChangShaFactory 的类,并指定它实现了 IProductionFactory 接口。这意味着 ChangShaFactory 类必须提供 IProductionFactory 接口中声明的所有方法的具体实现。
  • public void ProduceDuck_necks():这是 ProduceDuck_necks方法的实现。它使用了 Console.WriteLine 方法来在控制台上输出一条消息,表明是长沙工厂生产的鸭脖。
  • public void ProduceDuck_wings():这是 ProduceDuck_wings方法的实现。但是,这个方法中并没有实现生产鸭翅的逻辑,而是使用 throw 关键字抛出了一个 NotImplementedException 异常。异常信息为“抱歉,长沙工厂不生产鸭翅!”,这表示长沙工厂并不具备生产鸭翅的能力,如果调用这个方法,程序会抛出异常并停止执行。
     class ChangShaFactory : IProductionFactory
    {
        public void ProduceDuck_necks()//定义长沙工厂实现生产鸭脖的方法
        {
            Console.WriteLine("长沙工厂生产的鸭脖");
        }
        public void ProduceDcuk_wings()//定义长沙工厂实现生产鸭翅的方法
        {
            throw new NotImplementedException("抱歉,长沙工厂不生产鸭翅!"); 
            //长沙工厂不生产鸭翅,抛出 NotImplementedException 异常。
        }
    }

四、定义生产委托 

1、委托定义

[访问修饰符] delegate [委托类型] 委托名(参数)

定义了一个名为 ProductionDelegate 的公共委托。这个委托没有参数,并且不返回任何值(即返回类型为 void)。

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

2、定义委托注意事项

  1. 签名匹配:委托的类型定义(即其签名)必须与它引用的方法签名完全匹配。这包括方法的返回类型、参数数量和类型,以及参数的顺序。

  2. 访问修饰符:委托本身可以有访问修饰符,如publicinternalprivate。这决定了委托类型在何处可见和可用。

  3. 返回值类型:委托可以有返回值,也可以没有。如果有返回值,则委托的方法也必须具有相同的返回类型。

五、主函数

ProductionDelegate 是一个委托类型,它定义了一个方法的签名,这个方法没有参数并且没有返回值。委托类似于 C 或 C++ 中的函数指针,但它是类型安全的,并且可以使用 C# 的语法特性来定义和使用。

对于不能生产特定产品的工厂(例如 NanJingFactory 不能生产鸭脖,ChangShaFactory 不能生产鸭翅),如果尝试调用相应的方法,会抛出 NotImplementedException 异常。

internal class Program
    {
        static void Main(string[] args)
        {
            // 创建不同工厂的实例  
            IProductionFactory WuHanFactory = new WuHanFactory();
            IProductionFactory NanJingFactory = new NanJingFactory();
            IProductionFactory ChangShaFactory = new ChangShaFactory();

            // 武汉工厂可以生产鸭脖和鸭翅  
            ProductionDelegate WuHanproduceDuck_necks = WuHanFactory.ProduceDuck_necks;
            WuHanproduceDuck_necks(); // 调用委托执行方法  
            ProductionDelegate WuHanproduceDuck_wings = WuHanFactory.ProduceDuck_wings;
            WuHanproduceDuck_wings();

            // 南京工厂只能生产鸭翅  
            ProductionDelegate NanJingproduceDuck_wings = NanJingFactory.ProduceDuck_wings;
            NanJingproduceDuck_wings();

            // 尝试让南京工厂生产鸭脖,这里会抛出异常  
            //ProductionDelegate NanJingproduceDuck_necks = NanJingFactory.ProduceDuck_necks;  
            //NanJingproduceDuck_necks();  

            // 长沙工厂只能生产鸭脖  
            ProductionDelegate ChangShaproduceDuck_necks = ChangShaFactory.ProduceDuck_necks;
            ChangShaproduceDuck_necks();

            // 尝试让长沙工厂生产鸭翅,这里会抛出异常  
            // ProductionDelegate ChangShaproduceDuck_wings= ChangShaFactory.ProduceDuck_wings;  
            //ChangShaproduceDuck_wings();
        }
    }

六、完整代码

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

namespace ZhouHeiYa
{
    interface IProductionFactory//定义接口IProductionFactory,包含生产鸭脖和鸭翅的方法
    {
        void ProduceDuck_necks();//定义生产鸭脖的方法
        void ProduceDuck_wings();//定义生产鸭翅的方法
    }
    class WuHanFactory : IProductionFactory
    {
        public void ProduceDuck_necks()//定义武汉工厂实现生产鸭脖的方法
        {
            Console.WriteLine("武汉工厂生产的鸭脖");
        }
        public void ProduceDuck_wings()//定义武汉工厂实现生产鸭翅的方法
        {
            Console.WriteLine("武汉工厂生产的鸭翅");
        }
    }
    class NanJingFactory : IProductionFactory
    {
        public void ProduceDuck_necks()//定义南京工厂实现生产鸭脖的方法
        {
            throw new NotImplementedException("抱歉,南京工厂不生产鸭脖!");
            //南京工厂不生产鸭脖,抛出 NotImplementedException 异常。
        }
        public void ProduceDuck_wings()//定义南京工厂实现生产鸭翅的方法
        {
            Console.WriteLine("南京工厂生产的鸭翅");
        }
    }
    class ChangShaFactory : IProductionFactory
    {
        public void ProduceDuck_necks()//定义长沙工厂实现生产鸭脖的方法
        {
            Console.WriteLine("长沙工厂生产的鸭脖");
            Console.ReadLine();
        }
        public void ProduceDuck_wings()//定义长沙工厂实现生产鸭翅的方法
        {
            throw new NotImplementedException("抱歉,长沙工厂不生产鸭翅!");
            //长沙工厂不生产鸭翅,抛出 NotImplementedException 异常。
        }
    }
    public delegate void ProductionDelegate();//定义生产委托

    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建不同工厂的实例  
            IProductionFactory WuHanFactory = new WuHanFactory();
            IProductionFactory NanJingFactory = new NanJingFactory();
            IProductionFactory ChangShaFactory = new ChangShaFactory();

            // 武汉工厂可以生产鸭脖和鸭翅  
            ProductionDelegate WuHanproduceDuck_necks = WuHanFactory.ProduceDuck_necks;
            WuHanproduceDuck_necks(); // 调用委托执行方法  
            ProductionDelegate WuHanproduceDuck_wings = WuHanFactory.ProduceDuck_wings;
            WuHanproduceDuck_wings();

            // 南京工厂只能生产鸭翅  
            ProductionDelegate NanJingproduceDuck_wings = NanJingFactory.ProduceDuck_wings;
            NanJingproduceDuck_wings();

            // 尝试让南京工厂生产鸭脖,这里会抛出异常  
            //ProductionDelegate NanJingproduceDuck_necks = NanJingFactory.ProduceDuck_necks;  
            //NanJingproduceDuck_necks();  

            // 长沙工厂只能生产鸭脖  
            ProductionDelegate ChangShaproduceDuck_necks = ChangShaFactory.ProduceDuck_necks;
            ChangShaproduceDuck_necks();

            // 尝试让长沙工厂生产鸭翅,这里会抛出异常  
            // ProductionDelegate ChangShaproduceDuck_wings= ChangShaFactory.ProduceDuck_wings;  
            //ChangShaproduceDuck_wings();
        }
    }
}

七、运行结果

八、总结

在本次课程设计中,我们通过C#设计了一套系统来实现对周黑鸭工厂产品生产的统一管理,其中涉及到定义接口IProductionFactory,该接口包含了生产鸭脖和鸭翅的抽象方法;实现具体工厂类WuhHanFactory、NanJingFactory和ChangShaFactory,不同的类就可以通过实现接口的方法完成不同的要求,从而达到代码的重用和灵活性;还有定义生产委托,可以利用其实质(调用同参不同实现的函数)方便地实现武汉、南京和长沙这三个工厂对于周黑鸭生产的产品进行不同的实现。本次课程设计作业,我加深了对C#中接口、类和委托等关键知识点的理解,并学会了如何运用它们来解决实际问题,对于像接口、委托等这种较复杂的知识点就需要多动手操练代码,从实践和结果中直观地理解和应用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值