Si je définis une classe avec un constructeur privé par défaut et un constructeur public qui a des paramètres, comment puis-je accéder au constructeur privé?Accéder à un constructeur privé depuis l'extérieur de la classe en C#
public class Bob
{
public String Surname { get; set; }
private Bob()
{ }
public Bob(string surname)
{
Surname = surname;
}
}
Je peux accéder au constructeur privé via une méthode statique de la classe comme ceci:
public static Bob GetBob()
{
return new Bob();
}
Je pensais que je pouvais accéder au constructeur privé via une méthode d'extension, car (selon ma compréhension) les méthodes d'extension sont convertis afin qu'ils semblent être méthodes statiques sur la classe, mais je ne peux pas:
static class Fred
{
public static Bob Bobby(this Bob bob)
{
return new Bob();
}
}
Alors, comment puis-je accéder au constructeur privé?
Merci
EDIT:
La raison pour laquelle je voulais faire était que je voulais créer des tests pour une de nos classes d'affaires, mais pas permettre à un consommateur de cette classe être capable d'instancier un objet de manière incorrecte. Je le teste, donc je sais (j'espère!) Dans quelles circonstances les tests échoueront. Je suis toujours un test n00b en ce moment, donc mon idée peut ou ne pas avoir été la "mauvaise" façon de faire les choses. J'ai changé ma stratégie de test pour faire les choses comme le ferait un consommateur de cette classe, c'est-à-dire en appelant les méthodes publiques et si les méthodes publiques sont correctes, en supposant que les méthodes privées sont OK. Je préférerais encore tester les méthodes privées, mais mon patron est respire dans mon cou sur un livrable :-(
Pourquoi le vote serré? C'est toujours une question valide, même s'il n'est pas recommandé d'obtenir le constructeur. – jgauffin
D'accord - encore une question valable, pourquoi fermer? –
Re: Test de méthodes privées. J'ai trouvé qu'en testant individuellement des méthodes privées, mes tests sont plus petits et plus précis que si je ne faisais que tester des méthodes publiques. J'ai tendance à rendre 'private' dans 'protected' et à écrire une classe wrapper spécifique dans la bibliothèque de test pour les exposer comme des versions publiques plutôt que d'utiliser la réflexion. –