62 votes

Surcharge des constructeurs en C#

Comment je peux utiliser les constructeurs en C# comme ceci :

public Point2D(double x, double y)
{
    // ... Contracts ...

    X = x;
    Y = y;
}

public Point2D(Point2D point)
{
    if (point == null)
        ArgumentNullException("point");
    Contract.EndContractsBlock();

    this(point.X, point.Y);
}

J'ai besoin qu'il ne copie pas le code d'un autre constructeur...

181voto

Mark Cidade Points 53945
public Point2D(Point2D point) : this(point.X, point.Y) { }

61voto

João Angelo Points 24422

Vous pouvez factoriser votre logique commune dans une méthode privée, par exemple appelée Initialize qui est appelé par les deux constructeurs.

Étant donné que vous souhaitez effectuer une validation des arguments, vous ne pouvez pas recourir au chaînage des constructeurs.

Exemple :

public Point2D(double x, double y)
{
    // Contracts

    Initialize(x, y);
}

public Point2D(Point2D point)
{
    if (point == null)
        throw new ArgumentNullException("point");

    // Contracts

    Initialize(point.X, point.Y);
}

private void Initialize(double x, double y)
{
    X = x;
    Y = y;
}

5voto

jp2code Points 8461

Peut-être que votre classe n'est pas tout à fait complète. Personnellement, j'utilise une fonction init() privée avec tous mes constructeurs surchargés.

class Point2D {

  double X, Y;

  public Point2D(double x, double y) {
    init(x, y);
  }

  public Point2D(Point2D point) {
    if (point == null)
      throw new ArgumentNullException("point");
    init(point.X, point.Y);
  }

  void init(double x, double y) {
    // ... Contracts ...
    X = x;
    Y = y;
  }
}

0voto

Gaurav Agrawal Points 2552

Pour en savoir plus sur la surcharge des constructeurs en C#, consultez cette URL : http://planetofcoders.com/c-constructor-overloading/

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