C# - 如何包装静态类

时间:2010-12-24 10:52:04

标签: c# inheritance wrapping

我想为System.Io创建util类(例如File,Directory等)。

由于无法对静态类进行继承,我想知道如何将一个正确的方法包装成System.Io.File。

1 个答案:

答案 0 :(得分:13)

我会创建三种类型:

  • 包含您希望能够测试的所有方法的界面,例如

    public interface IFileSystem
    {
        Stream OpenWrite(string filename);
        TextReader OpenText(string filename);
        // etc
    }
    
  • 委托给系统实现的实现:

    public class FrameworkFileSystem : IFileSystem
    {
        public Stream OpenWrite(string filename)
        {
            return File.OpenWrite(filename);
        }
        // etc
    }
    
  • 用于测试的虚假实现:

    public class FakeFileSystem : IFileSystem
    {
        // Probably all kinds of things to allow in-memory files
        // to be created etc
    }
    

你可能不想在File中放置所有 - 因为许多操作可以由“核心”操作组成。当然,这意味着你自己重新实现这些操作,这可能是不可取的......