3-10 练习

Profile Picture
- Published on Mar 10, 2020🌏 Public

练习

  1. 抽象类 Carrier 载具,他有抽象方法Run,正常属性Name载具名。

  2. 逃生系统接口 IEscape , 有一个Escape方法;

  3. 武器系统 IWeapon,有OpenFire方法和Reload方法。

  4. 建立三个载具的子类,Car,Boat,Plane,继承载具。

  5. 建立若干个具体的类(具体车船飞机型号),继承自Car、Boat和Plane,根据实际情况,为这些类选择性的继承武器和逃生接口。

  6. 建立Carrier列表,以及IEscape和IWeapon的两个列表,把建立的实例丢到列表中。

  7. 对于载具列表,显示"XXX起航"/"XXX起飞"/"XXX启动",武器调用Reload和OpenFire,逃生设备,调用Escape;

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;

namespace Test4
{
    class Program
    {
        static void Main()
        {
            List<Carrier> carrierList = new List<Carrier>();
            List<IWeapon> weaponList = new List<IWeapon>();
            List<IEscape> escapeList = new List<IEscape>();

            var f22 = new F22();
            var da = new DaJiang();
            var tai = new TaiTangNiKe();
            var qian = new QianShuiTing();
            var tank = new Tank95();
            var wu = new WuLinHongGuang();

            carrierList.Add(f22);
            carrierList.Add(da);
            carrierList.Add(tai);
            carrierList.Add(qian);
            carrierList.Add(tank);
            carrierList.Add(wu);

            weaponList.Add(f22);
            weaponList.Add(qian);
            weaponList.Add(tank);

            escapeList.Add(f22);
            escapeList.Add(tai);
            escapeList.Add(qian);

            foreach (var item in carrierList)
            {
                item.Run();
            }


            foreach (var item in weaponList)
            {
                item.Reload();
                item.OpenFire();
            }

            foreach (var item in escapeList)
            {
                item.Escape();
            }
            Console.ReadKey();
        }

    }

    public class DaJiang : Plane
    {
        public DaJiang() : base("大疆无人机")
        {
        }
    }


    public class F22 : Plane, IWeapon, IEscape
    {
        public F22() : base("F22")
        {
        }
        public void Escape()
        {
            Console.WriteLine("射出");
        }

        public void OpenFire()
        {
            Console.WriteLine("发射导弹");
        }

        public void Reload()
        {
            Console.WriteLine("导弹装填");
        }
    }



    public class TaiTangNiKe : Boat, IEscape
    {
        public TaiTangNiKe() : base("泰坦尼克")
        {
        }
        public void Escape()
        {
            Console.WriteLine("典藏木板");
        }
    }

    public class QianShuiTing : Boat, IWeapon, IEscape
    {
        public QianShuiTing() :base("潜水艇"){
        }
        public void Escape()
        {
            Console.WriteLine("射出");
        }

        public void OpenFire()
        {
            Console.WriteLine("发射鱼雷");
        }

        public void Reload()
        {
            Console.WriteLine("鱼雷装填");
        }
    }


    public class WuLinHongGuang : Car
    {
        public WuLinHongGuang() : base("五菱宏光")
        {

        }
    }
  
    public class Tank95 : Car, IWeapon
    {
        public Tank95() : base("95式坦克")
        {

        }

        public void OpenFire()
        {
            Console.WriteLine("穿甲弹发射");
        }

        public void Reload()
        {
            Console.WriteLine("穿甲弹装填");
        }
    }

    public class Car : Carrier
    {
        public Car(string name)
        {
            Name = name;
        }
        public override void Run()
        {
            Console.WriteLine(Name + "启动");
        }
    }

    public class Boat : Carrier
    {
        public Boat(string name)
        {
            Name = name;
        }
        public override void Run()
        {
            Console.WriteLine(Name + "起航");
        }
    }
    public class Plane : Carrier
    {
        public Plane(string name)
        {
            Name = name;
        }
        public override void Run()
        {
            Console.WriteLine(Name + "起飞");
        }
    }


    public interface IEscape
    {
        void Escape();
    }

    public interface IWeapon
    {
        void OpenFire();
        void Reload();
    }

    public abstract class Carrier
    {
        public abstract void Run();

        public string Name { get; set; }
    }




}