ReadOnlyAttribute vs PropertyDescriptor.IsReadOnly()

时间:2009-04-16 17:50:55

标签: c# attributes readonly propertydescriptor

使用返回PropertyDescriptor方法的值的IsReadOnly()和与ReadOnlyAttribute相关联的方法有什么区别?

3 个答案:

答案 0 :(得分:5)

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

但是是的;在默认实现下,它将报告没有setter的属性的只读,以及标记为ReadOnlyAttribute的属性。

答案 1 :(得分:3)

使用Reflector查看它时没有区别。

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


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

答案 2 :(得分:0)

只是一个注意事项。

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

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

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

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

完全浪费时间!!!!