0

通过阅读 ICustomTypeDescriptor http://msdn.microsoft.com/de-de/library/system.componentmodel.icustomtypedescriptor.aspx的 MSDN 文章, 我无法找到关于 GetProperties()GetProperties(Attribute[])

第二种方法使用哪些属性以及描述符如何决定是否调用GetProperties有或没有Attribute数组。

(我已经移植了一些代码和用于调用的旧代码中的属性网格,GetProperties(Attributes[])但是新代码只调用GetProperties没有属性的,我看不出是什么影响了这一点)

4

1 回答 1

3

我无法找到和的区别的可靠 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属性的属性。

于 2013-07-25T15:05:28.460 回答