考虑下面的代码。
Object obj;
PropertyDescriptorCollection A = TypeDescriptor.GetProperties(obj);
PropertyInfo[] B = obj.GetType().GetProperties(); // EDIT*
我试图了解A和B之间的区别。据我所知, TypeDescriptor.GetProperties()将返回自定义的 TypeDescriptor 属性,其中,与 Type.GetProperties()一样,它将仅返回其固有的“真实”属性物体。这是正确的吗?如果obj没有任何自定义 TypeDescriptor 属性,则它默认情况下也将返回对象的字面固有属性。
* EDIT之前的原始第二行代码(返回值错误):
最佳答案
obj.GetType().GetProperties()
不返回PropertyDescriptorCollection
,而是返回System.Reflection.PropertyInfo[]
。正如您所建议的,PropertyInfo
类仅表示在对象上创建的实际属性。 PropertyDescriptor
是PropertyDescriptor
类的自定义具体子级(由定义自定义描述符的类型实现),或者是密封内部类ReflectPropertyDescriptor
的实例,该实例使用PropertyInfo
类提供属性的动态调用。
因此,对于一个未定义自定义描述符的类,您将在功能上返回相同的对象,尽管PropertyDescriptor
提取了PropertyInfo
。