C'è una chiara sovrapposizione tra ciò che si può fare con entrambi. Il materiale di riflessione ComponentModel è solo un piccolo strato più amichevole in cima a System.Reflection?Differenza tra riflessione ComponentModel (ad esempio PropertyDescriptor) e riflessione standard (ad esempio PropertyInfo)?
risposta
No - c'è di più. ComponentModel ti permette di fare alcune cose tipo DLR, come le proprietà di runtime. Ecco come un DataView espone le colonne a una griglia: non sono proprietà di riflessione, sono proprietà di esecuzione. Le parole chiave qui sono ICustomTypeDescriptor
e TypeDescriptionProvider
.
Questo modello consente anche l'astrazione e la direzione indiretta. Ad esempio, se si sta facendo molta riflessione sulle proprietà, si consideri HyperDescriptor - questa è un'utilità che ho scritto che utilizza un'implementazione personalizzata PropertyDescriptor
per scambiare il modello di riflessione per un modello precompilato, per enormi incrementi di prestazioni.
In termini di utilizzo, ci sono alcune altre differenze; ComponentModel supporta solo una singola istanza di qualsiasi attributo su un membro (diversamente dalla riflessione, dove sono consentiti più attributi simili). Ed è incentrato sui dati - così esistono le proprietà, così come gli eventi (destinati principalmente alla notifica di modifiche) - ma non ci sono campi né metodi.
Ha anche un buon supporto per i18n - dal momento che DisplayName ecc può essere personalizzato al volo.
Tuttavia, ComponentModel non è (direttamente) compatibile con cose come LINQ (MemberExpression in particolare) - poiché questo vuole legarsi ai dati di riflessione.
Infine, ComponentModel è molto utilizzato nell'IDE per cose come PropertyGrid (questo è il modo in cui funzionano le proprietà extra per i tool-tips), ma allo stesso modo quasi tutti i dati UI vincolanti avvengono tramite ComponentModel (poiché ciò consente al binding di supporta DataTable, classi e qualsiasi altra cosa tu possa pensare).
- 1. Differenza tra RTTI e riflessione in Java
- 2. Qual è la differenza tra riflessione basata su specchio e riflessione tradizionale?
- 3. Esempio della differenza tra List.fold e List.foldBack
- 4. Localizzazione regionale iOS8 (ad esempio pt-BR)?
- 5. Wildcard Xpath (ad esempio: "/ Dati/Clienti/D *")
- 6. perché namespace anteporre ::, ad esempio :: std :: vector
- 7. Code attività distribuite (ad esempio Celery) e script crontab
- 8. Come leggere i file .rej, ad esempio
- 9. Riflessione .NET: impossibile recuperare Proprietà dinamiche
- 10. [rilascio CFNumber]: messaggio inviato ad esempio deallocato
- 11. contatto esterno (ad esempio facebook) su android
- 12. Come nascondere l'estensione (ad esempio .aspx) nell'URL?
- 13. 'fusione' con la riflessione
- 14. Controlli XNA e GUI (ad esempio xaml e xna)
- 15. DDD: chiavi primarie (Id) e ORM (ad esempio, NHibernate)
- 16. Differenza tra le modalità di accesso dell'oggetto `File` (ad esempio w +, r +)
- 17. Differenza tra eccezione: e ad eccezione Eccezione:
- 18. Come leggere e comprendere un'eccezione mostruosa (ad esempio questa)
- 19. Slick.js: Ottieni diapositive attuali e totali (ad esempio 3/5)
- 20. E 'possibile ad esempio distruggere/cancellare sé stessi?
- 21. Riflessione inversa?
- 22. Proprietà nascondiglio e riflessione (C#)
- 23. linguaggi statici e di riflessione
- 24. Kotlin: Generics, la riflessione e la differenza tra il tipo T e T: Qualsiasi
- 25. Come sono modellate le missioni di gioco (ad esempio Oblivion)?
- 26. Riflessione C#: se ... altro?
- 27. Metodo standard di riferimento di un oggetto per identità (ad esempio, riferimenti circolari)?
- 28. Perché pandas.to_datetime lento per formato ora non standard come ad esempio '2014/12/31'
- 29. Distanza minore tra due legende in un grafico (ad esempio scala di colori e dimensioni)
- 30. Differenza tra focusin/focusout e focus/blur, con esempio
So che questo è più vecchio delle colline ma potresti spiegare alcune delle cose che puoi e non puoi fare in LINQ se usi System.ComponentModel per la riflessione? – wootscootinboogie
@woot è una risposta breve: LINQ non si preoccupa di ComponentModel –