Czy mogę ustawić własność prywatną poprzez odbicie?
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); }
}
}
Wypróbowałem następujące i nie działa, gdzie t
reprezentuje typ Entity
:
var t = typeof(Entity);
var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);
Myślę, że mogę to zrobić, ale nie mogę tego rozwiązać.
.net
reflection
properties
private
AwkwardCoder
źródło
źródło
Odpowiedzi:
EDYCJA: Ponieważ sama właściwość jest publiczna, najwyraźniej nie musisz jej używać,
BindingFlags.NonPublic
aby ją znaleźć. Dzwonienie,SetValue
mimo że ustawiający ma mniejszą dostępność, nadal robi to, czego oczekujesz.źródło
Tak to jest:
źródło
Możesz uzyskać dostęp do prywatnego ustawiacza z typu pochodnego za pomocą kodu
źródło
Żaden z nich nie działał dla mnie, a nazwa mojej nieruchomości była wyjątkowa, więc użyłem tego:
źródło
źródło