阅读ICUSTomTypeDescriptor http://msdn.microsoft.com/de-de/library/system.componentmodel.icustomtypedescriptor.aspx的MSDN文章
我无法找到一个可靠的解释
GetProperties()
和
GetProperties(Attribute[])
第二种方法使用了哪些属性,以及描述符如何决定是否使用GetProperties
数组调用Attribute
。
(我已经在用于调用GetProperties(Attributes[])
的旧代码中移植了一些代码和属性网格但是新代码只调用没有属性的GetProperties
而我看不出有什么影响这个)
答案 0 :(得分:2)
我无法找到一个可靠的解释
GetProperties()
和GetProperties(Attribute[])
主要区别在于GetProperties()
返回在实现ICustomTypeDescriptor
的类型上定义的所有属性,而GetProperites(Attributes [] attributes)
返回属性列表,这些属性至少归因于{中的一个属性{1}}参数。
检查此示例实现,该实现使用Attribute[] attributes
获取属性列表,然后针对Attributes []数组过滤它。
GetProperties()
第二种方法使用了哪些属性以及如何使用 描述符决定了它是否调用GetProperties 属性数组。
使用的属性由客户端代码选择,客户端代码使用TypeDesciptor
来获取属性列表。
例如,visual studio中使用的PropertyGrid控件使用此机制将所选对象的属性分组为类别,当您在设计画布上选择TextBox时,该TextBox的属性将显示在PropertyGrid中并进行分类进入布局,字体,杂项等...
这是通过使用Category
属性在TextBox类中注释这些属性,然后在数组中的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());
}
}
的TextBox类上调用TypeDescriptor
调用GetProperties(Attributes [] attributes)
来实现的。 TextBox返回所有具有Category
属性的属性。