Aller au contenu

La surcharge

Ne pas confondre redéfinition et surcharge

Ce concept objet s’applique uniquement aux constructeurs et aux méthodes des classes (que les méthodes soient statiques ou non). Il permet de décliner un service de création d’objet ou un service d’instance ou statique, pour proposer un même traitement ou un traitement différent mais avec des paramètres d’entrée différents. De plus, il peut être utilisé au sein d’une même classe (constructeurs et méthodes) ou au sein d’un arbre d’héritage (méthodes seulement).

Une méthode / un constructeur surcharge une autre méthode / constructeur quand elle / il porte le même nom à condition qu’elle / il n’ait pas la même liste des types de paramètre dans le même ordre.

Voici un exemple de surcharge de constructeurs :

public class Donut : Gateau
{
    public double DiametreInterne { get; }

    public Donut(double diametreExterne)
        : this(diametreExterne, 1.2)
    {

    }

    public Donut(double diametreExterne, double diametreInterne)
        : base(diametreExterne)
    {
        DiametreInterne = diametreInterne;
    }
}

Dans cet exemple, la classe Donut propose deux constructeurs surchargés, permettant de créer un donut en précisant uniquement son diamètre externe ou ses deux diamètres.

La bonne pratique est d'implémenter le chaînage des constructeurs, afin de non seulement factoriser l'initialisation des attributs, mais aussi facilité leur évolutivité lors de l'ajout de nouveaux attributs. Le premier constructeur appelle le second en précisant une valeur par défaut pour le diamètre interne. Le second constructeur fournit le diamètre externe au constructeur de la classe de base Gateau, puis initialise le diamètre interne propre au donut.