ReadOnlyAttribute vs PropertyDescriptor.IsReadOnly ()
-
09-09-2019 - |
Pergunta
Qual é a diferença entre usar um PropertyDescriptor
que retorna um valor para o método IsReadOnly()
, e que está associada a uma ReadOnlyAttribute
?
Solução
A principal diferença é que esta permite-lhe aproveitar mais controle se você fornecer sua própria implementação PropertyDescriptor
(via ICustomTypeDescriptor
, TypeDescriptionProvider
ou TypeConverter
). Então você pode escolher o seu própria lógica para quando é gravável -. Por exemplo, com base em direitos de acesso
Mas sim; sob a implementação padrão, ele irá informar somente leitura para propriedades sem setters, e para as propriedades marcadas com ReadOnlyAttribute
.
Outras dicas
Não há diferença quando eu olhar para ele com refletor.
Um dos classe derivada SimplePropertyDescriptor tem o seguinte código.
public override bool IsReadOnly
{
get
{
return this.Attributes.Contains(ReadOnlyAttribute.Yes);
}
}
Apenas uma nota.
Passei um dia implementar ICustomTypeDescriptor para os objetos de entidade no meu aplicativo, a fim de controlar o estado de somente leitura de cada entidade individualmente.
Assim, cada implementação PropertyDescriptor manteve uma referência para o objeto de entidade veio, portanto, a propriedade IsReadOnly foi algo como isto:
public override bool IsReadOnly
{
get { return _owner.IsReadOnly;}
}
No entanto, quando eu corri o código do componente BindingSource ler um conjunto de PropertyDescriptor s dos GetProperties () do ICustomTypeDescriptor para cada registro no conjunto, no entanto, quando se verificou o valor da IsReadOnly, ele só testou o PropertyDescriptor obtido a partir do primeiro registro.
completa perda de tempo !!!!