Question

Dans VB.NET, lequel est préférable d'utiliser: surcharge de fonction ou paramètres par défaut?

Était-ce utile?

La solution

Le code sera-t-il utilisé par d'autres langues? Si tel est le cas, cela fait basculer la balance vers des surcharges tout en gardant à l'esprit la réponse de Hamish. En particulier, C # ne prend pas en charge les paramètres facultatifs - pour le moment ...

Certes, cela n'empêcherait pas en réalité que quelqu'un utilise votre code en C #, cela pourrait être pénible pour eux.

S'il y a beaucoup de paramètres et qu'ils représentent logiquement quelque chose, vous pouvez envisager de les encapsuler ensemble, de la même manière que Process fonctionne avec ProcessStartInfo . C # est particulièrement agréable en C # grâce aux initialiseurs d’objets.

S'il s'agit d'une construction, vous pouvez également considérer le modèle de générateur comme une variante de celui-ci. Par exemple, dans les tampons de protocole, je peux faire quelque chose comme:

Person jon = new Person.Builder { Name="Jon", Age=32,
                                  Spouse="Holly", Kids=3 }.Build();

qui finit par être très lisible tout en créant une personne en une fois (dans une expression, et sans avoir à muter la personne elle-même - le type de message est immuable; seul le constructeur en est responsable).

Autres conseils

si les paramètres sont facultatifs (c'est-à-dire que les surcharges sont un sous-ensemble des paramètres acceptés par la signature complète de la procédure), les paramètres par défaut ou facultatifs seraient plus utiles.

Si la surcharge autorise un type différent pour le paramètre ou est un paramètre sémantiquement différent qui sera interprété différemment par la routine, les surcharges auront alors plus de sens.

FYI

Si vous souhaitez ajouter un paramètre à une fonction ou à une méthode appelée à partir d'autres assemblys, alors:

Vous pouvez surcharger en créant une fonction supplémentaire avec le paramètre extra.

Vous pouvez également ajouter un paramètre facultatif MAIS: vous devez recompiler tous les assemblys qui appellent cette fonction, même s'ils n'ont pas besoin d'utiliser le nouveau paramètre facultatif! Ce n'est généralement pas ce à quoi les gens s'attendent (en particulier ceux qui connaissent le fonctionnement de VB6). En gros, vous ne pouvez pas insérer un nouveau paramètre facultatif dans une fonction et vous attendre à ce qu'il soit totalement compatible avec les versions antérieures. De plus, si je comprends bien, si vous modifiez la valeur par défaut, vous devez reconstruire tous les assemblys appelants pour que la modification fonctionne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top