Oto struktura:Zastanawiając prywatną pole z klasy bazowej
MojaKlasa: SuperClass2
SuperClass2: SuperClass1
superClass2 jest w Product.Web i SuperClass1 jest w .NET system.Web złożenie
Próbuję wymusić wartość w prywatnym bool polu na SuperClass1. Ale nieważne, co próbuję, nie mogę uzyskać pól, które powrócą z refleksji.
Korzystam z następującego kodu z różnymi kombinacjami BindingFlag, ale nic nie zadziałało do tej pory. SuperClass1 to klasa abstrakcyjna.
((SuperClass1)this).GetType().GetFields(System.Reflection.BindingFlags.NonPublic);
Uwagi: Gdy używam GetProperties() wrócę ładne, duże liście, ale kiedy określił BindingFlags mam nic, chociaż istnieją właściwości dopasowania. O co chodzi?
Ponadto, pole nie jest zaznaczone wewnętrzny
obvisouly będę używając GetField (String name, BindingFlags), ale nie można nawet dostać GetFlags() do pracy.
Aktualizacja: Próbowałem dodanie BindingFlags.Instance jak sugeruje ale to nie działa (zgodnie z oczekiwaniami w każdym razie). Wracam 2 pola, które pochodzą z klasy SuperClass1 dziedziczy po. Zwraca null gdy używana z GetField (nazwy strun, flagi)
Oto kod dla klasy bazowej próbuję uzyskać pole do
public abstract class BaseValidator : Label, IValidator
{
private bool propertiesChecked;
...
}
Przepraszam za głupie pytanie, ale dlaczego to robisz? :) – sll
Świetne pytanie. Z powodu Product.Web.SuperClass2, muszę to zrobić jako pracę, aby zaimplementować obsługę funkcji, którą powinny już obsługiwać, ale nie. Zasadniczo API ma metodę wirtualną, ale ZAWSZE wywołuje podstawową implementację. Muszę więc zmienić wartość pola, aby nie wykonywał pewnych testów, więc mogę uruchomić mój kod. –
Proszę nie pytać "dlaczego chcesz to zrobić?" - nie jest to pomocne ani konstruktywne - istnieje milion ważnych powodów, aby to zrobić, a wszystkie są inne. Oczywiście kod pachnie, ale dogmat nie pomoże 900 tysiącom nas, którzy zostaną wyrzuceni tutaj przez google. – BrainSlugs83