首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeDescriptor.GetProperties()与Type.GetProperties()

TypeDescriptor.GetProperties()与Type.GetProperties()
EN

Stack Overflow用户
提问于 2009-09-09 21:36:56
回答 3查看 20.9K关注 0票数 38

请考虑以下代码。

代码语言:javascript
复制
Object obj;
PropertyDescriptorCollection A = TypeDescriptor.GetProperties(obj);
PropertyInfo[] B = obj.GetType().GetProperties();

我试图理解A和B之间的区别,因为我理解TypeDescriptor.GetProperties()将返回自定义TypeDescriptor属性,其中Type.GetProperties()只返回对象的内在“真实”属性。是这样的吗?如果obj没有任何自定义的TypeDescriptor属性,那么它只是默认地返回对象的文本内在属性。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-09 21:50:58

obj.GetType().GetProperties()不返回PropertyDescriptorCollection,而是返回System.Reflection.PropertyInfo[]。正如您建议的那样,PropertyInfo类只表示在对象上创建的实际属性。PropertyDescriptor要么是PropertyDescriptor类的自定义具体子类(由定义自定义描述符的类型实现),要么是密封内部类ReflectPropertyDescriptor的实例,它使用PropertyInfo类提供属性的动态调用。

因此,对于不定义自定义描述符的类,您将从功能上获得相同的对象,尽管PropertyDescriptor正在抽象出PropertyInfo

票数 21
EN

Stack Overflow用户

发布于 2009-09-09 21:50:36

设计器中使用了TypeDescriptor类,以便它们能够与设计时环境进行交互。特别是,设计人员可以覆盖和扩展TypeDescriptor的各种特性,但不能覆盖和扩展Type

一个很好的例子是使用数据绑定控件。DataSource属性的类型是System.Object,但在设计时,该属性被替换为一个具有更丰富设计时UI的新属性。

票数 10
EN

Stack Overflow用户

发布于 2011-01-24 09:08:56

TypeDescriptor类返回PropertyDescriptor对象,这些对象表示obj类型中的属性,以及为对象本身或其类型贡献的任何其他属性。

组件模型实际上非常复杂,但正如您所描述的,TypeDescriptor.GetProperties()的基本实现将返回ReflectPropertyDescriptor实例,这些实例表示对典型PropertyInfo对象的间接。您可以像使用PropertyDescriptor对象一样使用PropertyInfo对象:它们可以用于获取和设置属性值,并且它们具有属性。

对于WPF中的DependencyObject实例,TypeDescriptor.GetProperties()还返回附加属性。在本例中,这些PropertyDescriptor对象为依赖对象模型提供了一个间接性,而不是反射。

在组件设计器中,可以使用ICustomTypeDescriptorTypeDescriptionProviderAttribute (以及其他一些技术)在运行时或设计时创建您自己的PropertyDescriptor对象。在任何情况下,根据上下文的不同,从Type.GetProperties()返回的属性很可能与从TypeDescriptor返回的属性非常不同。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1402239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档