我有一个静态类(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)。但我想保持特定的类静态或避免更多的实例。
答案 0 :(得分:0)
静态方法不是虚拟的,也不能被覆盖,因此您不能拥有带有抽象静态方法的基类。如果你想拥有一个类层次结构,那么你需要使这个类,至少一些方法,非静态的。话虽如此,仍然可以将单个公共静态方法作为入口点,并使实例方法完全在该单个静态方法的范围内使用。
答案 1 :(得分: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);