ReadOnlyAttribute VS PropertyDescriptor.IsReadOnly()
-
09-09-2019 - |
题
是什么使用返回的PropertyDescriptor
方法的值的IsReadOnly()
之间和一个与相关联的ReadOnlyAttribute
的差,?
解决方案
主要的区别是,这可以让你抢占更多的控制,如果你提供自己的PropertyDescriptor
实现(通过ICustomTypeDescriptor
,TypeDescriptionProvider
或TypeConverter
)。然后,你可以选择你的自己的用于当它是可写的逻辑 - 例如,基于访问权限
但是,是;在默认实施方式中,它将报告只读属性,而无需设置器,以及用于标有ReadOnlyAttribute
性质。
其他提示
没有差时,我看它使用反射。
一个派生类SimplePropertyDescriptor的具有下面的代码。
public override bool IsReadOnly
{
get
{
return this.Attributes.Contains(ReadOnlyAttribute.Yes);
}
}
只是注意:
我花了一天实施ICustomTypeDescriptor在我的应用程序中的实体对象,为了单独控制每个实体的只读状态。
因此,每个的PropertyDescriptor实现保持其来自的实体对象的引用,所以IsReadOnly属性是这样的:
public override bool IsReadOnly
{
get { return _owner.IsReadOnly;}
}
然而,当我跑BindingSource组件从所述的GetProperties()ICustomTypeDescriptor的方法读取一组的PropertyDescriptor S的集合中的每个记录中的代码,但是,当它检查IsReadOnly的值时,它仅检测所获得的的PropertyDescriptor从第一个记录。
完全是浪费时间!!!!
不隶属于 StackOverflow