Maison > développement back-end > C++ > Pourquoi la syntaxe du groupe de méthodes provoque-t-elle des erreurs « d'invocation ambiguë » avec des délégués surchargés (Action vs. Func) ?

Pourquoi la syntaxe du groupe de méthodes provoque-t-elle des erreurs « d'invocation ambiguë » avec des délégués surchargés (Action vs. Func) ?

DDD
Libérer: 2025-01-13 10:09:43
original
942 Les gens l'ont consulté

Why Does Method Group Syntax Cause

Syntaxe des groupes de méthodes et invocation ambiguë avec surcharges de délégués

L'utilisation de la syntaxe de groupe de méthodes au lieu d'expressions lambda peut conduire à une ambiguïté lorsqu'il s'agit de méthodes surchargées acceptant des délégués Action ou Func<string>. Alors que les expressions lambda fonctionnent de manière transparente, les groupes de méthodes déclenchent une erreur « Invocation ambiguë ».

La nécessité d'un casting explicite : comprendre les règles de conversion

La cause première réside dans le groupe de méthodes de C# pour déléguer les règles de conversion. Un groupe de méthodes se convertit implicitement en un type délégué compatible, ce qui signifie que les types de paramètres et les modificateurs doivent correspondre. Surtout, le type de retour n'est pas pris en compte lors de cette conversion implicite.

Pendant la résolution de surcharge, le compilateur recherche les méthodes applicables. Une méthode est applicable si ses paramètres peuvent être implicitement convertis à partir des arguments fournis. Dans ce scénario, classWithSimpleMethods.GetString() s'applique à à la fois Func<string> et Action car les listes de paramètres sont vides. Le compilateur ne peut pas choisir entre ces conversions également valables, d'où l'erreur d'ambiguïté. La conversion explicite du groupe de méthodes vers Action ou Func<string> résout ce problème.

C# 7.3 et au-delà : résolution de surcharge améliorée

Comme l'a noté Jon Skeet, C# 7.3 a introduit des améliorations dans la résolution des surcharges, atténuant ainsi cette ambiguïté. Dans de nombreux cas, le casting explicite n'est plus nécessaire avec C# 7.3 et les versions ultérieures.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal