今天照着书上的例子尝试了一下多态的神奇,慢慢的找到了一些感觉。
今后还需要不断的体会这种精髓。
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;
}
}
}