.net 多态初探

本文通过实现文件管理类 LoadManager 和不同类型的文件类(如 WordFile 和 JPGFile),深入探讨了多态在编程中的应用。通过定义文件类型的枚举、文件打开接口以及具体文件类的实现,展示了如何使用多态特性来处理不同类型的文件,如文档和图片,实现了读取和打开文件的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天照着书上的例子尝试了一下多态的神奇,慢慢的找到了一些感觉。

今后还需要不断的体会这种精髓。


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

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            LoadManager lm = new LoadManager();
            lm.LoadFiles(new WordFile());
            lm.LoadFiles(new JPGFile());
            lm.OpenAllFiles();
            lm.OpenFile(lm.Files[0]);
            Console.ReadLine();
        }
    }

    /// <summary>
    /// 定义文件类型的枚举
    /// </summary>
    enum FileType
    {
        doc,
        txt,
        jpg,
        gif
    }

    /// <summary>
    /// 文件打开接口,由具体的文件类负责实现
    /// </summary>
    interface IFileOpen
    {
        void Open();
    }
    /// <summary>
    /// 抽象类 文件类,包含了文件打开的接口
    /// </summary>
    abstract class Files : IFileOpen
    {
        private FileType fileType = FileType.doc;
        public FileType FileType
        {
            get;
            set;
        }

        public abstract void Open();
    }
    /// <summary>
    /// 文档类,继承了文件类,并定义了关于文档相关的一些方法
    /// </summary>
    abstract class DocFile : Files
    {
        public int GetPagesCount()
        {
            return 123;
        }
    }
    /// <summary>
    /// 图片类 继承了文件类,并定义了图片相关的方法
    /// </summary>
    abstract class ImageFile : Files
    {
        public void ZoomIn()
        {
            //方法的实现
        }
    }
    /// <summary>
    /// 具体的文档类,需要重写open方法
    /// </summary>
    class WordFile : DocFile
    {
        public override void Open()
        {
            Console.WriteLine("open a doc file");
        }
    }

    /// <summary>
    /// 具体的图片类,也需要重写open方法
    /// </summary>
    class JPGFile : ImageFile
    {
        public override void Open()
        {
            Console.WriteLine("open a jpg file");
        }
    }

    //文件管理类
    class LoadManager
    {
        private List<Files> files = new List<Files>();
        public List<Files> Files
        {
            get { return files; }
            set { files = value; }
        }
        //读取资料
        public void LoadFiles(Files f)
        {
            files.Add(f);
        }
        //打开所有资料
        public void OpenAllFiles()
        {
            foreach (var f in files)
            {
                f.Open();
            }
        }
        //打开资料,负责调用具体文件的open方法
        public void OpenFile(IFileOpen f)
        {
            f.Open();
        }

        public FileType GetFileType(string filename)
        {
            return FileType.gif;
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值