C # - Как я могу обернуть статический класс - PullRequest
6 голосов
/ 24 декабря 2010

Я хочу создать классы утилит для System.Io (например, «Файл», «Каталог» и т. Д.).

Поскольку наследование статических классов невозможно, я хочу знать, как правильно обернуть, скажем,System.IO.File.

1 Ответ

13 голосов
/ 24 декабря 2010

Я бы создал три типа:

  • Интерфейс, содержащий все методы, которые вы хотите иметь возможность протестировать и т. Д., Например,

    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, поскольку многие операции могут быть составлены из «базовых» операций. Конечно, это означало бы самостоятельное выполнение операций, что может быть нежелательным ...

...