У меня есть коллекция классов, которые наследуются от абстрактного класса, который я создал. Я хотел бы использовать абстрактный класс в качестве фабрики для создания экземпляров конкретных реализаций моего абстрактного класса.
Есть ли способ скрыть конструктор от всего кода, кроме родительского класса.
Я бы хотел сделать это в основном
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
{
}
Но я хочу помешать кому-либо непосредственно создавать экземпляры двух конкретных классов. Я хочу убедиться, что только метод MakeAbstractClass () может создавать экземпляры базовых классов. Есть ли способ сделать это?
UPDATE
Мне не нужно обращаться к каким-либо конкретным методам ConcreteClassA или B извне класса Abstract. Мне нужны только открытые методы, которые предоставляет мой класс Abstract. На самом деле мне не нужно предотвращать создание экземпляров классов Concrete, я просто пытаюсь избежать этого, поскольку они не предоставляют никаких новых открытых интерфейсов, а представляют собой просто разные реализации некоторых очень специфических вещей, внутренних по отношению к абстрактному классу.
Для меня самое простое решение - создать дочерние классы, как упомянул Самджудсон . Однако я бы хотел этого избежать, так как это сделало бы файл моего абстрактного класса намного больше, чем хотелось бы. Я бы лучше разделил классы на несколько файлов для организации.
Полагаю, нет простого решения ...