0

我有一个静态类(VS 2010/C#),用于从模板生成 pdf 文档。我们使用 iTextSharp API 来生成 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)。但我想保持特定类静态或避免制作更多实例。

4

2 回答 2

0

您可以使用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);
于 2012-07-23T14:09:54.790 回答
0

静态方法不是虚拟的,也不能被覆盖,所以你不能有一个带有抽象静态方法的基类。如果您想拥有一个类层次结构,那么您需要使该类以及至少一些方法是非静态的。话虽如此,仍然可以将单个公共静态方法保留为入口点,并在该单个静态方法的范围内完全使用实例方法。

于 2012-07-23T14:03:09.160 回答