Si defino una clase con un constructor privado predeterminado y un constructor público que tiene parámetros, ¿cómo puedo acceder al constructor privado?Acceso a un constructor privado desde fuera de la clase en C#
public class Bob
{
public String Surname { get; set; }
private Bob()
{ }
public Bob(string surname)
{
Surname = surname;
}
}
puedo tener acceso al constructor privado a través de un método estático de la clase de la siguiente manera:
public static Bob GetBob()
{
return new Bob();
}
pensé que podía acceder al constructor privado a través de un método de extensión, ya que (según mi entendimiento) los métodos de extensión se traducen de manera que parecen ser métodos estáticos en la clase, pero no puedo:
static class Fred
{
public static Bob Bobby(this Bob bob)
{
return new Bob();
}
}
Entonces, ¿cómo puedo acceder al constructor privado?
Gracias
EDIT:
La razón por la que quería hacer esto era que quería crear pruebas para una de nuestras clases de negocios, pero no permitir que un consumidor de esta clase de ser capaz de instanciar un objeto incorrectamente. Lo estoy probando, así que sé (¡espero!) En qué circunstancias las pruebas fallarán. Todavía soy un n00b de prueba en este momento, así que mi idea puede o no haber sido la "manera incorrecta" de hacer las cosas.
He cambiado mi estrategia de prueba para hacer las cosas como lo haría un consumidor de esta clase, es decir, llamar a los métodos públicos y si los métodos públicos son correctos, suponiendo que los métodos privados son correctos. Todavía preferiría probar los métodos privados, pero mi jefe es respirando por mi cuello en un entregable :-(
Por qué la estrecha votación? Sigue siendo una pregunta válida, incluso si no se recomienda obtener el constructor. – jgauffin
De acuerdo, sigue siendo una pregunta válida, ¿por qué cerrar? –
Re: Probando métodos privados. He descubierto que probando métodos privados de forma individual, mis pruebas son más pequeñas y más precisas que si solo pruebo métodos públicos. Tiendo a hacer 'privado' en 'protegido' y escribir una clase contenedora específica en la biblioteca de prueba para exponerlos como versiones públicas en lugar de utilizar el reflejo. –