148 votes

Est-il possible de définir une propriété privée par réflexion

Puis-je définir une propriété privée par réflexion?

 public abstract class Entity
{
    private int _id;

    private DateTime? _createdOn;

    public virtual T Id
    {
        get { return _id; }
        private set { ChangePropertyAndNotify(ref _id, value, x => Id); }
    }

    public virtual DateTime? CreatedOn
    {
        get { return _createdOn; }
        private set { ChangePropertyAndNotify(ref _createdOn, value, x => CreatedOn); }
    }

}
 

J'ai essayé ce qui suit et cela ne fonctionne pas, où représente un type d'entité:

 var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);
 

Je suppose que je peux le faire mais que je ne peux pas y arriver.

À votre santé

Ollie

135voto

Arthur Points 5474
Elle

118voto

Tinister Points 3649
 t.GetProperty("CreatedOn")
    .SetValue(obj, new DateTime(2009, 10, 14), null);
 

EDIT: Étant donné que la propriété elle-même est publique, vous n'avez apparemment pas besoin d'utiliser BindingFlags.NonPublic pour la trouver. L'appel de SetValue bien que le configurateur ait moins d'accessibilité fait toujours ce que vous attendez.

12voto

drweb86 Points 1340

Vous pouvez accéder à un passeur privé à partir d'un type dérivé via un code

 public static void SetProperty(object instance, string propertyName, object newValue)
{
    Type type = instance.GetType();

    PropertyInfo prop = type.BaseType.GetProperty(propertyName);

    prop.SetValue(instance, newValue, null);
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X