67 votes

Appeler un constructeur à partir du corps d'un autre en C#

J'ai besoin d'appeler un constructeur à partir du corps d'un autre. Comment puis je faire ça?

Essentiellement

 class foo {
    public foo (int x, int y)
    {
    }

    public foo (string s)
    {
        // ... do something

        // Call another constructor
        this (x, y); // Doesn't work
        foo (x, y); // neither
    }
}

94voto

ladenedge Points 4986

Vous ne pouvez pas.

Vous devrez trouver un moyen de chaîner les constructeurs, comme dans :

 public foo (int x, int y) { }
public foo (string s) : this(XFromString(s), YFromString(s)) { ... }

ou déplacez votre code de construction dans une méthode de configuration commune, comme celle-ci :

 public foo (int x, int y) { Setup(x, y); }
public foo (string s)
{
   // do stuff
   int x = XFromString(s);
   int y = YFromString(s);
   Setup(x, y);
}

public void Setup(int x, int y) { ... }

3voto

Yahia Points 49011

Ceci n'est pas pris en charge - voir Constructeurs en C# .

Cependant, vous pouvez implémenter une méthode commune (privée) que vous appelez à partir des différents constructeurs...

1voto

DMac the Destroyer Points 1673

J'ai moi-même rencontré ce problème une fois ou deux... J'ai fini par devoir extraire la logique dont j'avais besoin dans cet autre constructeur dans une private void et l'appeler aux deux endroits.

 class foo
{
  private void Initialize(int x, int y)
  {
    //... do stuff
  }

  public foo(int x, int y)
  {
    Initialize(x, y);
  }

  public foo(string s_
  {
    // ... do stuff

    Initialize(x, y)
    // ... more stuff
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X