2009-04-20 5 views
1

J'ai vu récemment un constructeur de C# ressembler à quelque chose comme ça ...C# Constructor

public Class foo 
{ 
    public foo() : this(new bar()) 
    {} 
} 

Quelqu'un peut-il me aider à interpréter cela? D'où vient le bar()?
Si vous pouviez m'aider à terminer la classe en insérant la barre() à sa place pour que je puisse compiler/déboguer et voir toute l'image.

Merci d'avance.

Nikos

Répondre

7

La classe foo doit contenir un autre constructeur, qui prend un objet de la barre en tant que paramètre.

public class foo 
{ 
    public foo() 
     : this(new bar()) 
    { } 
    public foo(bar b) 
    { 
    } 
} 
public class bar 
{ 
} 
1

Il y aura un deuxième constructeur de la classe foo avec une signature comme celui-ci

public foo(bar Bar) 
{ 
    ... do something with bar here; 
} 
1

Ceci est une technique courante pour assurer que tous les constructeurs passent par un seul point pour que vous suffit de changer ce point (il peut avoir d'autres usages, mais je ne suis pas au courant d'entre eux).

Je l'ai vu dans les choses qui utilisent des arguments par défaut tels que:

class Rational { 
    private: 
     long numerator; 
     long denominator; 
    public: 
     void Rational (long n, long d) { 
      numerator = n; 
      denominator = d; 
     } 
     void Rational (long n): Rational (n,1) {} 
     void Rational (void): Rational (0,1) {} 
     void Rational (String s): Rational (atoi(s),1) {} 
} 

Ours avec la syntaxe, je n'ai pas accès à un compilateur ici, mais l'intention de base est de centraliser autant code possible dans ce premier constructeur.

Donc, si, par exemple, vous ajoutez un chèque pour assurer le dénominateur est supérieur à zéro ou le numérateur et le dénominateur sont réduits en utilisant une plus grande méthode de diviseur commun, il que doit se produire à un moment donné dans votre code.

+0

Intéressant. Que se passe-t-il avec le code que vous mettez dans les parenthèses vides? – Svante

+0

Il fonctionne toujours, mais après la dépendance (constructeur principal). – paxdiablo

Questions connexes