我有一组继承自我创建的抽象类的类。我想将抽象类用作创建抽象类的具体实现实例的工厂。
有没有办法从除父类之外的所有代码中隐藏构造函数。
我想基本上这样做
public abstract class AbstractClass
{
public static AbstractClass MakeAbstractClass(string args)
{
if (args == "a")
return new ConcreteClassA();
if (args == "b")
return new ConcreteClassB();
}
}
public class ConcreteClassA : AbstractClass
{
}
public class ConcreteClassB : AbstractClass
{
}
但我想阻止任何人直接实例化 2 个具体类。我想确保只有 MakeAbstractClass() 方法可以实例化基类。有没有办法做到这一点?
更新
我不需要从 Abstract 类之外访问 ConcreteClassA 或 B 的任何特定方法。我只需要我的 Abstract 类提供的公共方法。我真的不需要阻止具体类被实例化,我只是想避免它,因为它们没有提供新的公共接口,只是抽象类内部一些非常具体的东西的不同实现。
对我来说,最简单的解决方案是像 samjudson 提到的那样创建子类。但是我想避免这种情况,因为它会使我的抽象类文件比我希望的要大得多。我宁愿将课程分成几个文件以进行组织。
我想这没有简单的解决方案......