J'ai deux méthodes surchargées telles que ci-dessous après avoir appelé cette méthode comme ci-dessous, elle affichera la sortie sous la forme
4 Réponses :
Parce que le compilateur prend la méthode spécifique la plus proche possible que possible (NULL à String est plus proche que NULL à l'objet) disponible. Et dans ce cas que la surcharge avec la chaîne est plus proche, c'est pourquoi il est appelé. P>
C'est ce que MSDN Doit dire p>
Une fois que les membres de la fonction candidat et la liste d'arguments ont été identifiés, la sélection du meilleur membre de la fonction est la même dans Tous les cas: p> blockQuote>
Compte tenu de l'ensemble des membres de la fonction candidat applicables, le meilleur élément de fonction de cet ensemble est situé. p> li>
Si l'ensemble contient un seul élément de fonction, cet élément de fonction est le meilleur élément de fonction. p> li>
sinon, le meilleur membre de la fonction est le membre de la fonction qui est meilleur que tous les autres membres de la fonction par rapport à la donnée. Liste des arguments, à condition que chaque membre de la fonction soit comparé à tous Autres membres de la fonction utilisant les règles de la section 7.4.2.2. P> li>
S'il n'y a pas exactement un membre de la fonction meilleur que tous les autres membres de la fonction, l'invocation des membres de la fonction est une erreur ambiguë et une erreur de compilation se produit. P> li> ol> blockQuote>
Il tentera de faire correspondre le type le plus spécifique et Selon votre utilisation, vous devez probablement supprimer le paramètre totalement dans l'objet null code> est une chaîne de code code> valide code>. p>
string code> est plus spécifique que objet code> p>
code> surcharge. p>
Le compilateur C # prend la surcharge la plus spécifique possible. P>
comme chaîne code> est un objet code>, et il peut avoir la valeur de null code>, le compilateur juge chaîne code> être plus précis. p>
Voulez-vous dire que la chaîne est dérivée de la chaîne de la classe de base.so String a plus de priorité que l'objet.
@Jemi pas plus priorité i> ... comme string code> est un objet code>, mais il est plus précis, il pense (pas vraiment, les machines ne peuvent pas Pensez) "Bien, il y a deux méthodes. Le paramètre peut s'appliquer aux deux, mais string code> est plus spécifique que l'objet (comme chaîne code> est un objet code> Code>) Je vais donc résoudre cet appel à la chaîne code> surcharge. "
Ceci est juste à la manière dont C # compiler donne la priorité pour déterminer quelle méthode est meilleure em> à appeler. Il y a une règle: p>
Si la méthode A a des types de paramètres plus spécifiques que la méthode B, la méthode A est Dans votre cas, apparemment Vous pouvez renvoyer 7.5.3.2 Moteur Membre de fonction dans langage C # Spécification pour obtenir plus de compréhension. P> chaîne code> est plus spécifié que objet code>, c'est pourquoi loadtest (chaîne param) code> est appelé. P >
Y a-t-il une règle pour hiérarchiser ces choses?
@Jemi: Oui, beaucoup de règles, j'ai modifié ma réponse pour ajouter une spécification de langue C #, vous pouvez vous reporter 7.5.3.2 pour obtenir plus de règles
Ici lippert l'explique pour les constructeurs: Stackoverflow.com/a/5174773/613130
Si vous souhaitez appeler l'autre surcharge, utilisez
obj.loadtest ((objet) null); code>.