Saturday 18 August 2012

Devenva becomes a delivery centre on Microsoft technologies.

 

Recupérer la valeur d'une propriété privée - Get the value of private property outside the containing assembly via reflection( French version )

Récupérer la valeur d'une propriété privée d'une classe à partir d'une autre classe est, par théorie, impossible. En effet, par définition, une propriété déclarée private n'est accessible qu'à l'intérieur de la classe.
Considérons l'exemple :

 public class Person
    {
        public Personne(string name, string surname)
        {
            Name = name;
            Surname = surname;
        }
        public string  Name { get; set; }
        private string Surname { get; set; }
    }
Depuis une autre classe, il est impossible d'évoquer :

Person holder = new Person("Foo","Bar");
var holderName = holder.Name ; //right
var holderSurname = holder.Surname ; // error

Toutefois dans certains cas exceptionnels, nous voulons récupérer cette valeur. Etant donné que le source de l'assembly n'est pas disponible, voici une façon de récupérer la valeur :

 var holderSurname = p.GetType().GetProperty("Surname", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(p, null);

Conclusion : à partir de la réflexion, nous avons pu avoir la valeur d'une propriété privée d'une classe.