Генерация базового базового класса для статического класса.

У меня есть статический класс (VS 2010/C#), используемый для создания документов PDF из шаблона. Мы используем API-интерфейсы iTextSharp для создания PDF. Класс является статическим, предоставляя только открытый метод для генерации конкретного документа.

Теперь нам нужно реализовать новый класс документа для генерации документа другого типа. Я хотел бы создать базовый класс, поскольку некоторые методы будут совместно использоваться двумя классами, а другие будут специфичны для каждого типа документа.

Как лучше подходить для того, чтобы конкретный (под) класс оставался статичным и не делал базовый класс общедоступным или доступным вне определенных классов?

Я в настоящее время изучаю Фабричный Образец или состав.

РЕДАКТИРОВАТЬ: Здесь текущий конкретный код класса:

public static class SpecificDocGenerator
{
    /// <summary>
    /// Generates an international certificate.
    /// </summary>
    public static byte[] GenerateItDoc(DocInfo info)
    {
      //Here the document is generated and returned as byte array
    }


    /// <summary>
    /// Gets the resource.
    /// </summary>
    private static byte[] GetResource(string name)
    {
        //Gets a local resource (as example an image)
    }

Я хотел бы создать базовый класс для общих методов (как пример GetResource). Но я бы хотел, чтобы конкретный класс оставался статичным или не создавал больше экземпляров этого класса.

2 ответа

Статические методы не являются виртуальными и не могут быть переопределены, поэтому у вас не может быть базового класса с абстрактными статическими методами. Если вы хотите иметь иерархию классов, вам нужно сделать класс и, по крайней мере, некоторые методы нестатическими. Сказав это, все равно можно будет оставить один публичный статический метод в качестве точки входа и полностью использовать методы экземпляра изнутри области действия этого единственного статического метода.

Ты можешь использовать Singleton шаблон вместо статического класса. Это позволит вам использовать наследование:

public sealed class SpecificDocGenerator : AbstractDocGenerator
{
    private static readonly SpecificDocGenerator _instance;

    static SpecificDocGenerator
    {
       _instance = new SpecificDocGenerator();
    }

    public SpecificDocGenerator Instance
    {
        get { return _instance; }
    }

    private SpecificDocGenerator()
    {
    }

    public byte[] GenerateItDoc(DocInfo info)
    {
       //Here the document is generated and returned as byte array
    }

    private byte[] GetResource(string name)
    {
        //Gets a local resource (as example an image)
    }
}

Вы можете использовать другую реализацию Singleton, но это проще всего. Использование:

SpecificDocGenerator.Instance.GenerateItDoc(info);
Другие вопросы по тегам