我无法找到和的区别的可靠
GetProperties()
解释GetProperties(Attribute[])
主要区别在于GetProperties()
返回在实现的类型上定义的所有属性,ICustomTypeDescriptor
同时GetProperites(Attributes [] attributes)
返回属性列表,这些属性至少具有Attribute[] attributes
参数中的一个属性。
检查这个GetProperties()
用于获取属性列表的示例实现,然后根据 Attributes[] 数组对其进行过滤。
public override PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
List<PropertyDescriptor> descriptors = new List<PropertyDescriptor>();
foreach (PropertyDescriptor descriptor in this.GetProperties())
{
bool include = false;
foreach (Attribute searchAttribute in attributes)
{
if (descriptor.Attributes.Contains(searchAttribute))
{
include = true;
break;
}
}
if (include)
{
descriptors.Add(descriptor);
}
}
return new PropertyDescriptorCollection(descriptors.ToArray());
}
}
第二种方法使用什么属性以及描述符如何决定是否调用带有或不带有 Attribute 数组的 GetProperties。
TypeDesciptor
使用的属性由用于获取属性列表的客户端代码选择。
例如,Visual Studio 中使用的 PropertyGrid 控件使用此机制将所选对象上的属性分组到类别中,例如,当您在设计画布上选择一个 TextBox 时,该 TextBox 的属性将显示在 PropertyGrid 中并分类为布局,字体,杂项等...
这是通过使用属性注释 TextBox 类中的这些属性来实现的Category
,然后TypeDescriptor
调用GetProperties(Attributes [] attributes)
TextBox 类并传入Category
数组,TextBox 返回所有具有该Category
属性的属性。