.net 多态初探

来源:互联网 发布:允儿好看还是js卡好看 编辑:程序博客网 时间:2024/05/16 06:40

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

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


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;        }    }}