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?

Était-ce utile?

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 !!!!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top