web-dev-qa-db-fra.com

Est-il possible de surcharger un constructeur en C #?

Est-il possible de remplacer le constructeur de la classe de base dans la classe dérivée?

Si oui, comment cela peut-il être accompli et dans quel cas d'utilisation cela serait-il pratique? Sinon, pourquoi pas?

30
naval

Non, vous ne pouvez pas remplacer les constructeurs. Le concept n'a aucun sens en C #, car les constructeurs ne sont tout simplement pas invoqués de manière polymorphe. Vous indiquez toujours la classe que vous essayez de construire et les arguments du constructeur.

Les constructeurs ne sont pas hérités du tout - mais tous les constructeurs d'une classe dérivée doivent chaîner soit à un autre constructeur de la même classe, soit à l'un des constructeurs de la classe de base. Si vous ne le faites pas explicitement, le compilateur enchaîne implicitement au constructeur sans paramètre de la classe de base (et une erreur se produit si ce constructeur n'existe pas ou est inaccessible).

47
Jon Skeet

Non, les constructeurs ne sont pas hérités. Vous ne pouvez pas les remplacer dans une classe dérivée.
Raison

Un constructeur de base sera toujours appelé, pour chaque classe qui descend de l'objet, car chaque classe doit avoir au moins un constructeur qui appelle un constructeur base () (explicitement ou implicitement) et chaque appel à un constructeur this () doit finalement appeler un constructeur base ().

15
Ath An

Non, vous ne pouvez pas remplacer le constructeur.

Si vous regardez la syntaxe de base d'un constructeur, il doit avoir le même nom que la classe pour laquelle vous l'écrivez.

Disons que vous écrivez une méthode avec le même nom que celui de la classe de base (identique à celle du constructeur de la classe de base), ce sera juste une nouvelle méthode dans la classe dérivée sans type de retour spécifié, ce qui est syntaxiquement incorrect.

8
Vizard