Puis-je définir une propriété privée par réflexion?Est-il possible de définir la 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é le fait de suivre et il fonctionne pas, où t
représente un type de Entity
:
var t = typeof(Entity);
var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);
Je pense que je peux le faire, mais je ne peux pas travailler dehors.
Je le sais est en retard, mais j'ai trouvé un besoin pour cette pensée que je partagerais mon «pourquoi». J'avais besoin de surmonter un inconvénient dans certains logiciels tiers. Plus précisément, j'utilisais la méthode Crystal Reports ExportToStream. La façon dont cette méthode a été écrite, l'accès au tampon interne du flux n'a pas été autorisé. Afin d'envoyer le rapport au navigateur, j'ai dû copier le flux dans un nouveau tampon (100K +), puis l'envoyer. En définissant le champ privé '_exposable' dans l'objet stream sur 'true', j'ai pu envoyer le buffer interne directement, en sauvegardant une allocation de 100K + sur chaque requête. – Ray
Pourquoi? Disons que vous avez des setters privés sur vos propriétés Id sur tous les objets de votre domaine et que vous souhaitez implémenter des tests de référentiel. Ensuite, uniquement dans votre projet de test de référentiel, vous souhaiterez pouvoir définir la propriété Id. – bounav
Un autre scénario d'utilisation: définir des champs générés automatiquement comme "date de création" lors de l'importation de données. – ANeves