0

テンプレートからPDFドキュメントを生成するために使用される静的クラス(VS 2010 / C#)があります。iTextSharpAPIを使用してPDFを生成します。クラスは静的であり、特定のドキュメントを生成するためのパブリックメソッドのみを提供します。

次に、別の種類のドキュメントを生成するために、新しいドキュメントクラスを実装する必要があります。一部のメソッドは2つのクラスで共有され、他のメソッドは各ドキュメントタイプに固有であるため、基本クラスを作成したいと思います。

特定の(サブ)クラスを静的に保ち、基本クラスを特定のクラスの外部からパブリックまたは呼び出し可能にしないようにするためのより良いアプローチはどのようになりますか?

現在、ファクトリパターンまたはコンポジションを調べています。

編集:ここに現在の特定のクラスコード:

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

静的メソッドは仮想ではなく、オーバーライドできないため、抽象静的メソッドを持つ基本クラスを持つことはできません。クラス階層が必要な場合は、クラスと少なくともいくつかのメソッドを非静的にする必要があります。そうは言っても、単一のパブリック静的メソッドをエントリ ポイントとして残し、その単一の静的メソッドのスコープ内からインスタンス メソッドを完全に使用することは可能です。

于 2012-07-23T14:03:09.160 に答える
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 に答える