使用返回PropertyDescriptor
方法的值的IsReadOnly()
和与ReadOnlyAttribute
相关联的方法有什么区别?
答案 0 :(得分:5)
主要区别在于,如果您提供自己的PropertyDescriptor
实施(通过ICustomTypeDescriptor
,TypeDescriptionProvider
或TypeConverter
),则可以获得更多控制权。然后,您可以选择自己的逻辑,以便它可写 - 例如,基于访问权限。
但是是的;在默认实现下,它将报告没有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从第一张唱片开始。
完全浪费时间!!!!