gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:19:17 32 4
gpt4 key购买 nike

你可以用它们做的事情有明显的重叠。 ComponentModel 反射只是在 System.Reflection 之上更友好一点的层吗?

最佳答案

不 - 还有更多。 ComponentModel 允许您做一些 DLR 类型的事情,例如运行时属性。这就是 DataView 向网格公开列的方式——它们不是反射属性——它们是运行时属性。此处的关键字是 ICustomTypeDescriptorTypeDescriptionProvider

此模型还允许抽象和间接。例如,如果您正在对属性进行大量反射(reflection),请考虑 HyperDescriptor - 这是我编写的一个实用程序,它使用自定义 PropertyDescriptor 实现将反射模型交换为预编译模型,以实现巨大的性能提升。

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

它对 i18n 也有很好的支持——因为 DisplayName 等可以动态定制。

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

最后,ComponentModel 在 IDE 中被 PropertyGrid 之类的东西大量使用(这就是工具提示的额外属性的工作方式),但同样几乎所有 UI 数据绑定(bind)都是通过 ComponentModel 发生的(因为这允许绑定(bind)支持DataTable、类以及您能想到的任何其他内容)。

关于c# - ComponentModel 反射(例如 PropertyDescriptor)和标准反射(例如 PropertyInfo)之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301356/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com