Hier, dans le cadre de mon travail, une personne me demande qu’est ce que le polymorphisme ? Je tente de lui expliquer par mes mots et j’ai la honte de m’embrouiller un peu. C’est vrai que l’on utilise tous ce principe de l’orienté objet mais j’ai été surppris de voir qu’autour de moi, je n’étais pas le seul à m’embrouiller lors des explications.
Le polymorphisme est un principe général de l’Orienté objet, il n’est pas propre au C#.
L’explication façon analyste (UML) est la suivante :
Le polmymorphisme est le fait qu’un même message puisse être interprété de differentes façons en fonction de l’object qui recoit ce message.
Le message dans cette définition est un appel vers un méthode en C#.
Pour comprendre, prenons un exemple concret :
Modélisons le problème suivant :
Prenons une classe de base :

Maintenant modélisons la classe Chat et la Classe chien.


Maintenant que nous avons modélisé la superclasse et les classes concrètes qui héritent de cette superclasse.
Nous pouvons utiliser ces classes concrètes. Par exemple créons une liste d’animaux comprenant des chiens, des chats et des animaux non-identifiés.

Dans ma liste d’animaux, peu importe que la classe concrète soit un Chien, un Chat ou un animal, ce que je récupère est un Animal. Comme la méthode MakeNoise() est définie dans le classe Animal, je peux donc l’invoquer. Si c’est un chat qui a été instancié, le chat miaulera. Si c’est un chien, celui-ci aboiera. Ci ce n’est ni l’un, ni l’autre, nous ne serons pas comment il fait du bruit car le cri dépend de l’animal.
Et voici le résultat de notre exemple :

En conclustion, le polymorphisme évite de tester le type d’objet concret que l’on manipule, lorsque l’on exécutera un de ses méthodes spécialisées, c’est le polymorphisme qui exécutera le code spécifique (ceci grâce au balise virtual et override).