5

PropertyDescriptor使用为方法返回值的 aIsReadOnly()和与 a 关联的有什么区别ReadOnlyAttribute

4

3 回答 3

5

主要区别在于,如果您提供自己的PropertyDescriptor实现(通过或) ICustomTypeDescriptor,这可以让您获得更多控制权。然后,您可以选择自己的可写逻辑 - 例如,基于访问权限。TypeDescriptionProviderTypeConverter

但是,是的; 在默认实现下,它将为没有设置器的属性和标记为的属性报告只读ReadOnlyAttribute

于 2009-04-16T19:48:47.913 回答
3

当我使用反射器查看它时没有区别。

派生类 SimplePropertyDescriptor 之一具有以下代码。


    public override bool IsReadOnly
    {
        get
        {
            return this.Attributes.Contains(ReadOnlyAttribute.Yes);
        }
    }

于 2009-04-16T18:09:10.133 回答
0

只是一个注释。

我花了一天时间为我的应用程序中的实体对象实现 ICustomTypeDescriptor,以便单独控制每个实体的只读状态。

因此,每个 PropertyDescriptor 实现都保留了对它来自的实体对象的引用,因此 IsReadOnly 属性是这样的:

public override bool IsReadOnly
{
    get { return _owner.IsReadOnly;}
}

但是,当我运行代码时,BindingSource 组件从 ICustomTypeDescriptor 的 GetProperties() 方法中为集合中的每条记录读取一组 PropertyDescriptor,但是,当它检查 IsReadOnly 的值时,它只测试了从第一个获取的 PropertyDescriptor记录。

完全浪费时间!!!!

于 2013-02-04T23:55:32.900 回答