C# : surcharge de constructeurs avec paramètres facultatifs & les arguments nommés?
Ce n'est pas une question sur les bonnes pratiques de codage, je suis juste de travailler par le biais de la sémantique.
disons que j'ai la suite des constructeurs...
public FooClass(string name = "theFoo")
{ fooName = name; }
public FooClass(string name, int num = 7, bool boo = true) : this(name)
{ fooNum = num; fooBool = boo; }
est-il possible d'utiliser des arguments nommés ainsi...?
FooClass foo1 = new FooClass(num:1);
//où je suis seulement en passant un argument nommé, en s'appuyant sur les options à prendre soin du reste
ou appelez le constructeur FooClass(string, int, bool) sans arguments? comme dans...
FooClass foo2 = new FooClass();
- Comment au sujet de l'essayer? Vous avez le code, juste là... à vous de me dire si cela fonctionne!
- ok, j'aurais dû précisé que l'exemple de code ne fonctionne pas et je voulais savoir comment faire pour le faire fonctionner.
Vous devez vous connecter pour publier un commentaire.
Utilisation des nommés et des arguments optionnels affecte la résolution de surcharge dans l'une des manières suivantes:
Une méthode d'indexation, ou d'un constructeur est un candidat pour l'exécution si chacun de ses paramètres sont facultatifs ou correspond, par nom ou par la poste, à un seul argument dans l'appel de la déclaration, et que l'argument peut être converti vers le type du paramètre.
Si plus d'un candidat est trouvé, la surcharge de règles de résolution privilégié pour les conversions sont appliquées à la arguments qui sont explicitement spécifiés. Les arguments omis pour les paramètres facultatifs sont ignorés.
Si deux candidats sont jugés tout aussi bon, la préférence est accordée à un candidat qui n'a pas de paramètres facultatifs pour les quels sont les arguments qui ont été omis dans l'appel. C'est une conséquence d'une préférence générale dans la résolution de surcharge pour les candidats qui ont moins de paramètres.
http://msdn.microsoft.com/en-us/library/dd264739.aspx
num
paramètre, vous devez aussi fournir lesname
paramètre. Puisque vous n'avez pas spécifier une valeur facultative pour lesname
paramètre dans la seconde surcharge, il n'est pas un paramètre facultatif.Paramètres facultatifs sont définis à la fin de la liste des paramètres, après tous les paramètres requis. Si l'appelant fournit un argument pour toute une succession de paramètres facultatifs, il doit fournir des arguments pour tous les précédents paramètres facultatifs. Séparée par des virgules des lacunes dans la liste d'arguments ne sont pas pris en charge.
Aussi,
Un argument nommé pouvez suivre les arguments de position, comme illustré ici.
CalculateBMI(123, hauteur: 64);
Cependant, une position argument ne peut pas suivre un argument nommé. L'énoncé suivant provoque une erreur de compilation.
//CalculateBMI(poids: 123, 64);