windows程序设计课程----C#----类,委托,接口

1、 作业内容

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

2、 主要思路

想要解决诸如此类"多个同级子类实现同一功能"的问题,需要使用接口的知识。在这个问题中,通过定义一个公共的接口,让不同的工厂实现相同的生产功能,所以我们把生产这个动作定义为接口。

interface IProductionFactory1
    {
        void ProductYB();
    }
    interface IProductionFactory2
    {
        void ProductYC();
    }

之所以定义两个接口,是为了解决部分工厂只有部分生产功能的问题,让对应功能的工厂继承对应的接口。

定义完接口,我们需要分别定义工厂类继承接口。

class WuhanFactory : IProductionFactory1, IProductionFactory2
    {
        public void ProductYB() { Console.WriteLine("鸭脖已于武汉生产。"); }
        public void ProductYC() { Console.WriteLine("鸭翅已于武汉生产。"); }

    }

剩下两个工厂类以此类推,这里不过多赘述。

完成工厂类的定义后,我们需要实现三个工厂的生产工作的同时进行,如何实现“同时”这个动作,我们引入事件与委托。委托是用来实现事件的批量实现,所以我们需要将事件与生产动作联系起来。

声明委托和事件:

        public delegate void ProductionDelegate();
        public event ProductionDelegate Production;

委托与事件的执行:

            WuhanFactory Fac1 = new WuhanFactory();
            NanjingFactory Fac2 = new NanjingFactory();
            ChangshaFactory Fac3 = new ChangshaFactory();
            ProductionDelegate Pro1 = Fac1.ProductYB;
            ProductionDelegate Pro2 = Fac1.ProductYC;
            ProductionDelegate Pro3 = Fac2.ProductYC;
            ProductionDelegate Pro4 = Fac3.ProductYB;
            Program m1 = new Program();
            m1.Production += Pro1;
            m1.Production += Pro2;
            m1.Production += Pro3;
            m1.Production += Pro4;
            m1.Production();

3、 难点

本题目中接口的理解并不困难,需要体会的是事件与委托的声明与定义。

        public delegate void ProductionDelegate();
        public event ProductionDelegate Production;

第一行是委托的声明,事件的声明紧跟在委托后。注意,委托名后的括号内参数应该与工厂类的接口实现函数的参数相同,同时,事件的声明中无需带括号。

WuhanFactory Fac1 = new WuhanFactory();

创造工厂类实例后,通过该实例访问生产函数“初始化”委托。

ProductionDelegate Pro1 = Fac1.ProductYB;

需要注意的是,事件的访问方式是需要创建事件声明类下的实例,通过实例来访问,所以我们创建Progarm类的实例来访问事件。

            Program m1 = new Program();
            m1.Production += Pro1;
            m1.Production += Pro2;
            m1.Production += Pro3;
            m1.Production += Pro4;

最后通过实例访问事件,给事件传递相应生产函数的参数,即可实现事件的“批次”委托处理。

4、 运行截图:

5、 实现代码

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

namespace Interface
{
    interface IProductionFactory1
    {
        void ProductYB();
    }
    interface IProductionFactory2
    {
        void ProductYC();
    }

    class WuhanFactory : IProductionFactory1, IProductionFactory2
    {
        public void ProductYB() { Console.WriteLine("鸭脖已于武汉生产。"); }
        public void ProductYC() { Console.WriteLine("鸭翅已于武汉生产。"); }

    }

    class NanjingFactory : IProductionFactory2
    {
        public void ProductYC() { Console.WriteLine("鸭翅已于南京生产。"); }

    }

    class ChangshaFactory : IProductionFactory1
    {
        public void ProductYB() { Console.WriteLine("鸭脖已于长沙生产。"); }

    }
    internal class Program
    {
        public delegate void ProductionDelegate();
        public event ProductionDelegate Production;
        static void Main(string[] args)
        {
            WuhanFactory Fac1 = new WuhanFactory();
            NanjingFactory Fac2 = new NanjingFactory();
            ChangshaFactory Fac3 = new ChangshaFactory();
            ProductionDelegate Pro1 = Fac1.ProductYB;
            ProductionDelegate Pro2 = Fac1.ProductYC;
            ProductionDelegate Pro3 = Fac2.ProductYC;
            ProductionDelegate Pro4 = Fac3.ProductYB;
            Program m1 = new Program();
            m1.Production += Pro1;
            m1.Production += Pro2;
            m1.Production += Pro3;
            m1.Production += Pro4;
            m1.Production();
            Console.ReadLine();
        }
    }
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值