Il y a un chevauchement distinct entre ce que vous pouvez faire avec les deux. Le reflet ComponentModel est-il simplement un calque plus convivial sur System.Reflection?Différence entre la réflexion ComponentModel (par exemple PropertyDescriptor) et la réflexion standard (par exemple PropertyInfo)?
Répondre
Non - il y a plus. ComponentModel vous permet de faire quelques choses de type DLR, telles que les propriétés d'exécution. C'est ainsi qu'un DataView expose des colonnes à une grille - ce ne sont pas des propriétés de réflexion - ce sont des propriétés d'exécution. Les mots-clés ici sont ICustomTypeDescriptor
et TypeDescriptionProvider
.
Ce modèle permet également l'abstraction et l'indirection. Par exemple, si vous faites beaucoup de réflexion sur les propriétés, considérez HyperDescriptor - c'est un utilitaire que j'ai écrit qui utilise une implémentation personnalisée PropertyDescriptor
pour permuter le modèle de réflexion pour un modèle pré-compilé, pour des gains de performances énormes.
En termes d'utilisation, il existe d'autres différences; ComponentModel ne prend en charge qu'une seule instance de n'importe quel attribut sur un membre (contrairement à la réflexion, où plusieurs attributs similaires sont autorisés). Et il est centré sur les données - donc les propriétés existent, tout comme les événements (principalement destinés à la notification de changement) - mais il n'y a pas de champs ni de méthodes.
Il a également un bon support pour i18n - puisque le DisplayName etc. peut être personnalisé à la volée. Cependant, ComponentModel n'est pas (directement) compatible avec des choses comme LINQ (MemberExpression en particulier) - puisque cela veut se lier aux données de réflexion. Enfin, ComponentModel est très utilisé dans l'EDI par des choses comme PropertyGrid (c'est comme ça que fonctionnent les propriétés supplémentaires des tool-tips), mais presque toutes les liaisons de données UI se font via ComponentModel (puisque cela permet la liaison à soutenir DataTable, les classes, et tout ce que vous pouvez penser).
- 1. Propriétés indexées par réflexion C#
- 2. « casting » avec la réflexion
- 3. Comment fonctionne la "réflexion statique" dans Java? (par exemple dans mockito ou easymock)
- 4. Upcasting F # enregistrement créé par la réflexion
- 5. Récupère la méthode MethodBase par réflexion
- 6. C#: Valeur Obtenir par réflexion
- 7. Code d'accès dans une vue par réflexion
- 8. Différence entre les types existentiels de Scala et le joker de Java par exemple?
- 9. Requête par entité (Exemple)
- 10. NHibernate Recherche par exemple
- 11. VS2008 C# Exceptions avec des méthodes invoquées par la réflexion
- 12. Comment projeter correctement les objets créés par la réflexion
- 13. Est-il possible de définir la propriété privée par réflexion?
- 14. Chargement de la DLL C# par réflexion, mais appli App.config
- 15. en utilisant d'abord() avec une collection générique par la réflexion
- 16. Castle Windsor Résolution d'interface par réflexion
- 17. Valeur des paramètres de méthode par réflexion
- 18. Comment identifier les membres abstraits par réflexion
- 19. Utilisation de C# avec OpenOffice par réflexion
- 20. jquery ajax obtenir par exemple
- 21. Réflexion pour la validation
- 22. Constructeurs génériques et réflexion
- 23. C# Réflexion et génériques
- 24. C#: Récupération et utilisation d'un IntPtr * par réflexion
- 25. Réflexion Elixir
- 26. Réflexion, attributs et sélection de propriétés
- 27. Réflexion et compilation pour obtenir la valeur de MemberExpression
- 28. Introspection .NET VS Réflexion
- 29. Scala énumération et réflexion
- 30. réflexion et casting
Je sais que c'est plus ancien que les collines, mais pourriez-vous expliquer certaines choses que vous pouvez et ne pouvez pas faire dans LINQ si vous utilisez System.ComponentModel pour la réflexion? – wootscootinboogie
@woot c'est une réponse courte: LINQ ne se soucie pas de ComponentModel –