簡體   English   中英

ComponentModel反射(例如PropertyDescriptor)和標准反射(例如PropertyInfo)之間的區別?

[英]Difference between ComponentModel reflection (e.g PropertyDescriptor) and standard reflection (e.g PropertyInfo)?

你能用它們做什么之間有明顯的重疊。 ComponentModel反射的東西在System.Reflection之上只是一個更友好的層嗎?

不 - 還有更多。 ComponentModel允許您執行一些DLR類型的操作,例如運行時屬性。 這就是DataView將列公開給網格的方式 - 它們不是反射屬性 - 它們是運行時屬性。 這里的關鍵字是ICustomTypeDescriptorTypeDescriptionProvider

該模型還允許抽象和間接。 例如,如果您對屬性進行了大量反思,請考慮使用HyperDescriptor - 這是我編寫的一個實用程序,它使用自定義PropertyDescriptor實現來交換預編譯模型的反射模型,從而獲得巨大的性能提升。

在使用方面,還有一些其他差異; ComponentModel僅支持成員上任何屬性的單個實例(與反射不同,其中允許多個相似的屬性)。 它是以數據為中心的 - 因此存在屬性,事件(主要用於更改通知)也存在 - 但是沒有字段或方法。

它也對i18n有很好的支持 - 因為DisplayName等可以即時定制。

但是,ComponentModel並不(直接)與LINQ(特別是MemberExpression)之類的東西兼容 - 因為它想要綁定到反射數據。

最后,ComponentModel在IDE中被高度用於像PropertyGrid這樣的東西(這就像工具提示的額外屬性一樣工作),但同樣幾乎所有UI數據綁定都是通過ComponentModel發生的(因為這允許綁定支持DataTable,類,以及你能想到的任何其他事情)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM