Appel du constructeur depuis un autre constructeur de la même classe

J’ai une classe avec 2 constructeurs:

public class Lens { public Lens(ssortingng parameter1) { //blabla } public Lens(ssortingng parameter1, ssortingng parameter2) { // want to call constructor with 1 param here.. } } 

Je veux appeler le premier constructeur du 2ème. Est-ce possible en C #?

Append :this(required params) à la fin du constructeur pour faire ‘chaîner constructeur’

 public Test( bool a, int b, ssortingng c ) : this( a, b ) { this.m_C = c; } public Test( bool a, int b, float d ) : this( a, b ) { this.m_D = d; } private Test( bool a, int b ) { this.m_A = a; this.m_B = b; } 

Source de courtoisie de csharp411.com

Oui, vous utiliseriez ce qui suit

 public class Lens { public Lens(ssortingng parameter1) { //blabla } public Lens(ssortingng parameter1, ssortingng parameter2) : this(parameter1) { } } 

L’ordre de l’évaluation du constructeur doit également être pris en compte lors du chaînage des constructeurs:

Pour emprunter à la réponse de Gishu, un peu (pour garder le code un peu similaire):

 public Test(bool a, int b, ssortingng c) : this(a, b) { this.C = c; } private Test(bool a, int b) { this.A = a; this.B = b; } 

Si nous modifions l’évaluation effectuée dans le constructeur private , nous verrons un peu pourquoi la commande par constructeur est importante:

 private Test(bool a, int b) { // ... remember that this is called by the public constructor // with `this(...` if (hasValue(this.C)) { // ... } this.A = a; this.B = b; } 

Au-dessus, j’ai ajouté un appel de fonction faux qui détermine si la propriété C a une valeur. À première vue, il pourrait sembler que C aurait une valeur – il est défini dans le constructeur appelant; Cependant, il est important de se rappeler que les constructeurs sont des fonctions.

this(a, b) est appelé – et doit “retourner” – avant que le corps du constructeur public ne soit exécuté. En d’autres termes, le dernier constructeur appelé est le premier constructeur évalué. Dans ce cas, private est évalué avant public (pour utiliser la visibilité comme identifiant).