Czy mogę ustawić prywatną nieruchomość poprzez odbicie?Czy można ustawić prywatną własność 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); }
}
}
Pró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);
Chyba mogę to zrobić, ale nie mogę pracować go.
Znam to jest późno, ale znalazłem potrzebę tej myśli, że podzielę się moim "dlaczego". Musiałem przezwyciężyć niedogodności związane z oprogramowaniem innych firm. W szczególności korzystałem z metody Crystal Reports ExportToStream. Sposób, w jaki napisano tę metodę, uniemożliwił dostęp do wewnętrznego bufora strumienia. Aby wysłać raport do przeglądarki, musiałem skopiować strumień do nowego bufora (100K +), a następnie wysłać go. Ustawiając prywatne pole "_expozable" w obiekcie strumienia na "true", mogłem wysłać wewnętrzny bufor bezpośrednio, zachowując przydział 100K + dla każdego żądania. – Ray
Dlaczego? Załóżmy, że masz ustawione selektory prywatne we właściwościach Id na całym obiekcie domeny i chcesz zaimplementować testy repozytoriów. Tylko w projekcie testowania repozytorium będziesz mógł ustawić właściwość Id. – bounav
Inny scenariusz użycia: ustawianie automatycznie generowanych pól, takich jak "data utworzenia" podczas importowania danych. – ANeves