Maison > développement back-end > C++ > Pourquoi les méthodes d'extension dynamique lancent-elles RuntimeBinderexceptions en C #?

Pourquoi les méthodes d'extension dynamique lancent-elles RuntimeBinderexceptions en C #?

Barbara Streisand
Libérer: 2025-01-27 23:31:09
original
230 Les gens l'ont consulté

C # Méthode d'extension dynamique et RuntimeBinderException

En C #, nous devons souvent ajouter de nouvelles méthodes à la catégorie existante sans modifier le code source d'origine. La méthode d'expansion est introduite pour répondre à ces besoins.

Considérons une liste entière et utilisez la méthode First() pour accéder au premier élément:

<code class="language-csharp">List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };
Console.WriteLine(list.First());</code>
Copier après la connexion

Ce code s'exécute parfaitement. Cependant, si vous essayez d'utiliser le mot-clé pour convertir la même liste en un objet dynamique, cela provoquera des anomalies: dynamic

<code class="language-csharp">dynamic dList = list;
Console.WriteLine(dList.First()); // 抛出 RuntimeBinderException</code>
Copier après la connexion
Pour comprendre ce comportement anormal, nous devons comprendre le mécanisme sous-jacent de la méthode d'expansion. Dans le code non dynamique, le compilateur recherche des classes statiques qui correspondent à la méthode d'extension dans toutes les classes connues. Cette recherche suit la séquence de nidification et les instructions

disponibles. using

Lorsque la méthode d'expansion dynamique est appelée, le langage dynamique est en cours d'exécution (DLR) pour rencontrer un défi. Il doit déterminer les instructions de nidification de l'espace de dénomination et

dans le code source pendant l'exécution. Cependant, il n'y a pas de mécanisme pratique pour coder ces informations sur le site d'appel. Bien qu'il ait considéré la possibilité de concevoir ce mécanisme, il a finalement été cru que le coût était trop élevé et que le risque était trop élevé. using

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 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