Maison > développement back-end > C++ > Pourquoi les tableaux C# n'implémentent-ils pas directement « IList », et comment semblent-ils toujours le faire ?

Pourquoi les tableaux C# n'implémentent-ils pas directement « IList », et comment semblent-ils toujours le faire ?

Mary-Kate Olsen
Libérer: 2025-01-04 17:56:39
original
257 Les gens l'ont consulté

Why Don't C# Arrays Directly Implement `IList`, and How Do They Still Seem To?

Tableaux en C# : une plongée plus approfondie dans l'implémentation de l'interface

Bien que les tableaux en C# semblent implémenter IList, ils n'exposent pas publiquement la propriété Count. Cela peut sembler contradictoire avec les règles d'implémentation de l'interface C#.

En réalité, les tableaux implémentent System.Collections.IList, et non System.Collections.Generic.IList. Les interfaces génériques comme IList ne peut pas être implémenté par des types non génériques comme Array.

Cependant, le CLR génère des types de tableaux spécifiques qui pourraient potentiellement implémenter ces interfaces. Mais même pour ces types de tableaux concrets, la conversion en IEnumerable fonctionne, tandis que la récupération de la carte d'interface génère une exception.

Cela est dû au typage "coins comme un canard", où le compilateur et le CLR reconnaissent les tableaux comme implémentant IList. L'instruction cast est gérée par une classe wrapper cachée System.SZArrayHelper qui fournit une implémentation de IList sur le tableau.

Même si la propriété Count n'est pas explicitement implémentée, le CLR fournit un getter interne utilisant un transtypage vers le tableau T[].

Ce comportement, bien que quelque peu non conventionnel, permet pour une mise en œuvre transparente et efficace de IList pour les tableaux. C'est une technique intelligente qui met en valeur les mécanismes cachés du C# et du CLR qui contribuent à sa flexibilité et sa puissance.

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