Maison >développement back-end >C++ >Comment les tableaux C# implémentent-ils apparemment IList sans propriété de comptage explicite ?

Comment les tableaux C# implémentent-ils apparemment IList sans propriété de comptage explicite ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-05 09:30:39442parcourir

How Do C# Arrays Seemingly Implement IList Without an Explicit Count Property?

Comment les tableaux implémentent partiellement IList, malgré la propriété Count manquante

En C#, les tableaux implémentent IList, pourtant ils il manque la propriété Count explicitement déclarée dans l’interface. Cela a soulevé des questions quant à savoir si ce comportement constitue une violation des règles d'implémentation de l'interface ou simplement un malentendu.

Plonger dans le framework

Alors que les tableaux n'implémentent pas IList interface. Cependant, une implémentation directe n'existe pas.

Approche Quacks-Like-a-Duck du CLR

Le CLR implémente des techniques spéciales pour les tableaux, similaires à celles utilisées pour la valeur genres. Le compilateur reconnaît les transtypages vers IList et demande au CLR de l'implémenter via l'objet tableau sous-jacent. Le CLR délègue ensuite l'exécution à la classe cachée System.SZArrayHelper, qui implémente les interfaces nécessaires.

Implémentation de la propriété Count

Bien qu'elle n'ait pas été explicitement déclarée, la propriété Count peut être accessible. Cependant, il est implémenté comme suit :

internal int get_Count<T>() {
    // Warning: "this" is an array, not an SZArrayHelper
    T[] _this = JitHelpers.UnsafeCast<T[]>(this);
    return _this.Length;
}

Comme le commentaire le suggère, ce comportement peut être considéré comme une violation des règles, mais il facilite une gestion efficace des tableaux.

Conclusion

Les tableaux implémentent partiellement IList grâce à l'approche charlatane du CLR. Bien que la propriété Count ne soit pas explicitement définie, elle est implémentée en interne par le CLR, permettant une intégration transparente entre les tableaux et les collections génériques.

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