Dans les génériques C #, nous pouvons déclarer une contrainte pour qu'un paramètre de type T
ait un constructeur par défaut, en disant where T : new()
. Cependant, aucun autre type de contrainte comme celui-ci n'est valide - new(string)
par exemple, etc.
Du point de vue de la conception et / ou de la mise en œuvre d'un langage, quelle en est la raison?
Y a-t-il quelque chose dans la façon dont les constructeurs fonctionnent ou dans la façon dont le système de type est implémenté qui l'interdit (ou du moins le rend plus difficile)? Si oui, c'est quoi? Je me souviens avoir lu quelque part qui default(T)
compile réellement new T()
pour T : struct
. Est-ce lié à cela, peut-être?
Ou s'agit-il simplement d'une décision de conception prise pour éviter de compliquer le langage?
new(string)
n'est pas une contrainte de constructeur par défaut. Votre question revient à dire "Pourquoi n'y a-t-il pas des contraintes qui nécessitent des signatures de constructeur spécifiques?" Très probablement parce qu'une telle contrainte ne serait pas particulièrement utile.