当前位置:  开发笔记 > 编程语言 > 正文

ComponentModel反射(例如PropertyDescriptor)和标准反射(例如PropertyInfo)之间的区别?

如何解决《ComponentModel反射(例如PropertyDescriptor)和标准反射(例如PropertyInfo)之间的区别?》经验,为你挑选了1个好方法。

你能用它们做什么之间有明显的重叠.ComponentModel反射的东西在System.Reflection之上只是一个更友好的层吗?



1> Marc Gravell..:

不 - 还有更多.ComponentModel允许您执行一些DLR类型的操作,例如运行时属性.这就是DataView将列公开给网格的方式 - 它们不是反射属性 - 它们是运行时属性.这里的关键字是ICustomTypeDescriptorTypeDescriptionProvider.

该模型还允许抽象和间接.例如,如果您对属性进行了大量反思,请考虑使用HyperDescriptor - 这是我编写的一个实用程序,它使用自定义PropertyDescriptor实现来交换预编译模型的反射模型,从而获得巨大的性能提升.

在使用方面,还有一些其他差异; ComponentModel仅支持成员上任何属性的单个实例(与反射不同,其中允许多个相似的属性).它是以数据为中心的 - 因此存在属性,事件(主要用于更改通知)也存在 - 但是没有字段或方法.

它也对i18n有很好的支持 - 因为DisplayName等可以即时定制.

但是,ComponentModel并不(直接)与LINQ(特别是MemberExpression)之类的东西兼容 - 因为它想要绑定到反射数据.

最后,ComponentModel在IDE中被高度用于像PropertyGrid这样的东西(这就像工具提示的额外属性一样工作),但同样几乎所有UI数据绑定都是通过ComponentModel发生的(因为这允许绑定支持DataTable,类,以及你能想到的任何其他事情).

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有