Maison >développement back-end >C++ >Pourquoi la résolution de surcharge du groupe de méthodes échoue-t-elle avec des erreurs d'appel ambiguës en C# ?

Pourquoi la résolution de surcharge du groupe de méthodes échoue-t-elle avec des erreurs d'appel ambiguës en C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-13 08:07:42357parcourir

Why Does Method Group Overload Resolution Fail with Ambiguous Invocation Errors in C#?

Ambiguïté de la résolution de surcharge du groupe de méthodes C#

Le problème :

L'utilisation de la syntaxe de groupe de méthodes avec des méthodes déléguées surchargées en C# peut déclencher une erreur du compilateur « Invocation ambiguë », même si les méthodes anonymes appellent avec succès les mêmes surcharges.

Pourquoi cela arrive :

Le compilateur C# ne dispose pas d'une "meilleure" règle définitive lors de la conversion d'un groupe de méthodes en plusieurs types de délégués compatibles lors de la résolution de surcharge. Par exemple, si classWithSimpleMethods.GetString pouvait être converti à la fois en Func<string> et Action, le compilateur ne peut pas choisir entre eux, ce qui entraîne une ambiguïté.

Résolution (diffusion de type explicite) :

La solution consiste à convertir explicitement le groupe de méthodes en type de délégué souhaité :

<code class="language-csharp">classWithDelegateMethods.Method((Func<string>)classWithSimpleMethods.GetString);</code>

Amélioration C# 7.3 :

Résolution de surcharge améliorée en C# 7.3 pour les groupes de méthodes. Dans de nombreux cas (comme dans l'exemple fourni), classWithDelegateMethods.Method(classWithSimpleMethods.GetString) et les appels similaires se compilent désormais sans casting explicite. Cependant, une ambiguïté peut encore surgir dans des scénarios complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn