多态 模拟 移动硬盘 插入电脑 读写,方法1传参,方法2属性赋值

//多态 模拟 移动硬盘 插入电脑 读写,方法1传参,方法2属性赋值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //多态 模拟 移动硬盘 插入电脑 读写
            //MobileDisk md = new MobileDisk();//父类抽象类不能实例化,所以实例化子类
            //UDisk ud = new UDisk();
            //Mp3 mp = new Mp3();
            MobileStorage mp = new Mp3();
            Computer cpu = new Computer();//通过属性拿到父类,在外面不能传参数,采用赋值
            cpu.Ms = mp;//表示把插入的MP3赋值给电脑里面的Ms属性
            //cpu.CpuRead(mp);
            //cpu.CpuWrite(mp);
            cpu.CpuRead();//采用属性赋值形式,不用传参数
            cpu.CpuWrite();

            Console.ReadKey();
        }     
    }
    /// <summary>
    /// 抽象的父类,可移动存储
    /// </summary>
    public abstract class MobileStorage
    {
        public abstract void Read();
        public abstract void Write();
    }
    public class MobileDisk : MobileStorage
    {

        public override void Read()//override可以重写抽象方法和虚方法
        {
            Console.WriteLine("移动硬盘在读取数据");
        }

        public override void Write()
        {
            Console.WriteLine("移动硬盘在写入数据");
        }
    }
    public class UDisk : MobileStorage
    {

        public override void Read()
        {
            Console.WriteLine("U盘在读取数据");
        }

        public override void Write()
        {
            Console.WriteLine("U盘在写入数据");
        }
    }
    public class Mp3 : MobileStorage
    {

        public override void Read()
        {
            Console.WriteLine("Mp3在读取数据");
        }

        public override void Write()
        {
            Console.WriteLine("Mp3在写入数据");
        }
        public void PlayMusic()
        {
            Console.WriteLine("MP3自己可以播放音乐");
        }
    }

    public class Computer
    {
        //方法2,拿字段存传入的父类参数
        private MobileStorage _ms;

        public MobileStorage Ms//字段封装属性
        {
            get { return _ms; }
            set { _ms = value; }
        }

        public void CpuRead()//方法1,想拿到父类,传参数进来就行,可以传子类进来
        {
            Ms.Read();//方法2,通过属性拿到父类,在外面不用传参数,采用赋值
        }
        public void CpuWrite()
        {
            Ms.Write();
        }

        //public void CpuRead(MobileStorage ms)//方法1,想拿到父类,传参数进来就行,可以传子类进来
        //{
        //    ms.Read();
        //}
        //public void CpuWrite(MobileStorage ms)
        //{
        //    ms.Write();
        //}
    }
}
原文地址:https://www.cnblogs.com/blacop/p/5963057.html