Maison > développement back-end > C++ > Pourquoi .NET ne peut-il pas déduire les types de retour dans les méthodes génériques ?

Pourquoi .NET ne peut-il pas déduire les types de retour dans les méthodes génériques ?

Patricia Arquette
Libérer: 2025-01-03 22:06:39
original
260 Les gens l'ont consulté

Why Can't .NET Infer Return Types in Generic Methods?

Pourquoi les types de retour de méthodes génériques ne peuvent pas être déduits dans .NET

Dans .NET, les types de retour des méthodes génériques ne peuvent pas être déduits. Cette restriction est appliquée pour empêcher l'inférence de type de circuler « dans les deux sens » au sein d'une expression, ce qui peut conduire à des explosions combinatoires de combinaisons de types possibles.

Exemple

Considérez le méthode générique suivante :

static TDest Gimme<TSource, TDest>(TSource source)
{
    return default(TDest);
}
Copier après la connexion

Si l'inférence du type de retour était autorisée, le code suivant serait valide :

string dest = Gimme(5);
Copier après la connexion

Cependant, ce code entraînerait une erreur du compilateur car le type de retour de Gimme ne peut pas être déduit du type d'argument int.

Raisonnement

Le raisonnement derrière cette restriction est d'éviter les situations dans lesquelles les informations de type circulent à la fois de l'intérieur et de l'extérieur d'une expression. Considérez les scénarios suivants :

Scénario 1 : surcharges multiples

Supposons que nous ayons dix surcharges d'une méthode N avec différents types d'arguments. Si nous autorisions l'inférence du type de retour pour les méthodes génériques, nous aurions besoin de déduire le type de retour de G dans l'expression N(G(5)). Cela nécessiterait de considérer les dix surcharges de N et de sélectionner la « meilleure ». Cependant, les critères permettant de déterminer la « meilleure » ​​surcharge seraient flous, ce qui entraînerait des ambiguïtés potentielles.

Scénario 2 : Expressions conditionnelles

Considérons l'expression double x = b ? G(5) : 123. Si l'inférence du type de retour était autorisée, nous aurions besoin de déterminer le type de retour de G en fonction du type de l'expression conditionnelle (double). Cependant, cela ne prendrait pas en compte la possibilité que le type de retour de G doive être implicitement convertible en type d'argument de l'expression conditionnelle (int).

Scénario 3 : Expressions imbriquées

Si nous combinons plusieurs expressions conditionnelles et appels de méthode, comme dans l'expression N(N(b ? G(5) * G("hello") : 123)), la complexité de l’inférence du type de retour augmente de façon exponentielle. Nous aurions besoin de considérer toutes les surcharges possibles de G et N en combinaison, conduisant à une explosion des combinaisons de types possibles.

Conclusion

En interdisant l'inférence de type de retour pour les méthodes, .NET empêche ces explosions combinatoires et garantit que l'inférence de type se déroule de manière prévisible et cohérente.

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