Tengo una colección de clases que heredan de una clase abstracta que creé. Me gustaría utilizar la clase abstracta como una fábrica para crear instancias de implementaciones concretas de mi clase abstracta.¿Hay alguna manera de hacer que un constructor solo sea visible para una clase padre en C#?
¿Hay alguna manera de ocultar un constructor de todos los códigos, excepto una clase principal.
me gustaría hacer esto básicamente
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
{
}
Pero quiero que nadie pueda crear instancias directamente a las 2 clases concretas. Quiero asegurarme de que solo el método MakeAbstractClass() pueda instanciar las clases base. ¿Hay alguna manera de hacer esto?
ACTUALIZACIÓN
No necesito acceder a cualquiera de los métodos específicos de ConcreteClassA o B desde fuera de la clase abstracta. Solo necesito los métodos públicos que ofrece mi clase de Abstract. Realmente no necesito evitar que se creen instancias de las clases concretas, solo trato de evitarlo ya que no proporcionan nuevas interfaces públicas, solo implementaciones diferentes de algunas cosas muy específicas internas de la clase abstracta.
Para mí, la solución más simple es make child classes as samjudson mentioned. Sin embargo, me gustaría evitar esto, ya que haría que el archivo de mi clase abstracta fuera mucho más grande de lo que me gustaría. Prefiero mantener las clases divididas en unos pocos archivos para la organización.
supongo que no hay una solución fácil a este ...
Buen ejemplo, pero haga que el nombre sea un poco más .NETy y llámelo "CreateAbstractClass (string args)" para sake de estándares de codificación :) –