Maison > développement back-end > C++ > Pourquoi la syntaxe du groupe de méthodes provoque-t-elle des erreurs d'invocation ambiguës avec des surcharges de délégués ?

Pourquoi la syntaxe du groupe de méthodes provoque-t-elle des erreurs d'invocation ambiguës avec des surcharges de délégués ?

Linda Hamilton
Libérer: 2025-01-13 10:10:43
original
794 Les gens l'ont consulté

Why Method Group Syntax Causes Ambiguous Invocation Errors (C# Delegate Overloads)

Erreurs d'appel ambiguës causées par la syntaxe du groupe de méthodes C# et la surcharge des délégués

Scénario :

Supposons que vous souhaitiez appeler une fonction qui a deux surcharges : une qui accepte un délégué Action et une autre qui accepte un délégué Func. Vous préférez utiliser la syntaxe de groupe de méthodes plutôt que les méthodes anonymes (expressions lambda).

Question :

Lorsque vous essayez d'appeler ces surcharges en utilisant la syntaxe de groupe de méthodes, vous rencontrerez une erreur d'appel ambigu du compilateur.

Explication :

La raison de cette ambiguïté réside dans les règles de conversion implicites pour les groupes de méthodes et les types de délégués. Selon la spécification C#, les groupes de méthodes peuvent être implicitement convertis en types de délégués compatibles. Cependant, la « compatibilité » dans ce contexte fait référence à la compatibilité des méthodes et des types de délégués, et non à la compatibilité des groupes de méthodes et des types de délégués.

Dans l'exemple donné, le groupe de méthodes classWithSimpleMethods.GetString est un candidat valide pour les deux surcharges de délégués : classWithDelegateMethods.Method(Action) et classWithDelegateMethods.Method(Func<string>). Puisqu'il n'existe pas de règles de type claires pour déterminer quelle conversion est la meilleure, le compilateur génère une erreur d'appel ambiguë.

Solution :

Pour résoudre cette ambiguïté, vous pouvez fournir un cast explicite au type de délégué correspondant, comme suit :

<code class="language-csharp">classWithDelegateMethods.Method((Action)classWithSimpleMethods.DoNothing);
classWithDelegateMethods.Method((Func<string>)classWithSimpleMethods.GetString);</code>
Copier après la connexion

Mise à jour C# 7.3 :

À partir de C# 7.3, vous n’obtenez plus d’erreurs d’appel ambiguës lors de l’utilisation de la syntaxe de groupe de méthodes. Grâce à un classement amélioré des candidats à la surcharge, le compilateur déduit désormais correctement le type de délégué attendu en fonction du contexte.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal