1、作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 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();
}
}
}