ReadOnlyAttribute vs PropertyDescriptor.IsReadOnly ()
-
09-09-2019 - |
Question
Quelle est la différence entre l'utilisation d'un PropertyDescriptor
qui renvoie une valeur pour la méthode de IsReadOnly()
, et qui est associé à un ReadOnlyAttribute
?
La solution
La principale différence est que cela vous permet de saisir plus de contrôle si vous fournissez votre propre implémentation de PropertyDescriptor
(via ICustomTypeDescriptor
, TypeDescriptionProvider
ou TypeConverter
). Ensuite, vous pouvez choisir propre logique quand il est inscriptible -. Par exemple, en fonction des droits d'accès
Mais oui; dans la mise en œuvre par défaut, il fera rapport en lecture seule pour les propriétés sans setters, et pour les propriétés marquées ReadOnlyAttribute
.
Autres conseils
Pas de différence quand je regarde en utilisant réflecteur.
L'un des SimplePropertyDescriptor de classe dérivée a le code suivant.
public override bool IsReadOnly
{
get
{
return this.Attributes.Contains(ReadOnlyAttribute.Yes);
}
}
Juste une note.
J'ai passé une journée mise en œuvre ICustomTypeDescriptor pour les objets d'entité dans ma demande, afin de contrôler l'état de lecture seule de chaque entité individuellement.
Ainsi, chaque mise en œuvre de PropertyDescriptor a gardé une référence à l'objet de l'entité, il est venu, donc la propriété IsReadOnly était quelque chose comme ceci:
public override bool IsReadOnly
{
get { return _owner.IsReadOnly;}
}
Cependant, lorsque je me suis le code du composant BindingSource lire un ensemble de PropertyDescriptor s des GetProperties () de ICustomTypeDescriptor pour chaque enregistrement dans l'ensemble, cependant, quand il vérifie la valeur de IsReadOnly, on ne teste le PropertyDescriptor obtenu à partir du premier enregistrement.
perte de temps !!!!